TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

How to Escape from {{ #PROGRAMMING_LANGUAGE }}

42 点作者 dmiladinov大约 12 年前

12 条评论

epenn大约 12 年前
While I won't say this is bad advice, I also don't think it's the best way to truly free yourself in the manner I think the OP is getting at. In the long run you'll be <i>far</i> better off learning and cultivating rock solid CS fundamentals rather than just hopping from one framework to the next hoping to glean a little more from each. Having an in-depth understanding of the types of data structures and algorithms that go into developing $new_hotness will allow you to pick up different languages/frameworks/etc significantly faster than just learning $new_hotness on the surface level.<p>Take parametric polymorphism [1] as a random example; i.e. what's called generics in Java, templates in C++, etc. You might know how to use it in a particular language and realize it provides some benefit. But if you truly understand the underlying concept then you can quickly recognize it and/or know to look for it in any language you pick up, whether it's Java, OCaml, Visual Prolog, etc. Note each of those languages are in three totally separate paradigms (object oriented, functional, &#38; logic) and yet all of them still make use of the same underlying idea to achieve a particular goal (in this case, a form of type-safe expressivity). If you have a good understanding of $random_fundamental_concept then all you would need is to take a couple minutes to learn its syntax in your new language of choice and be on your way. I chose that example because it was the first that popped into my head, but in reality it goes for just about anything.<p>In short, with a good understanding of the fundamentals, you can make the time it takes to learn something new that will invariably be based on them significantly shorter.<p>[1] <a href="http://en.wikipedia.org/wiki/Parametric_polymorphism" rel="nofollow">http://en.wikipedia.org/wiki/Parametric_polymorphism</a>
评论 #5356788 未加载
评论 #5358120 未加载
评论 #5357098 未加载
sergiotapia大约 12 年前
There are so many new tools coming out, but here's the thing:<p>_You don't really need to abandon ship every time something shiny comes along._<p>Really, you don't. Use the tools that help you get the job done quickly and efficiently. I jumped ship from .NET (asp.net mvc) to Ruby on Rails because of three very distinct features:<p>1. Cheaper hosting.<p>2. A better baked-in ORM.<p>3. Ruby made me more productive.<p>It wasn't because some random guy in Germany wrote a blog post and called it the Next Coming of Christ - it was because I tried it out for a small project, and loved how it made my life easier. Less time in front of the computer, and more time with my family.<p>Just make sure you jump on the next big thing for the right reasons.
ef4大约 12 年前
There's a better strategy than making bets on particular languages and frameworks: get so good at learning that you can become proficient in any of them in only days, and reach mastery in just months.<p>The biggest bottleneck I see that prevents people from being able to do this is their code-reading skill.<p>With practice you can read and understand codebases much, much more quickly than most people (who are so intimidated they never even try). Once you can do this, you can very quickly pick up (1) the rich details about how the system works, (2) the ability to extend the system and fix bugs in it, (3) understanding of what is idiomatic and what is not.
评论 #5357073 未加载
评论 #5356955 未加载
cpprototypes大约 12 年前
As I'm getting older, efficiency in use of time is becoming a very significant constraint. And I've found that learning a lot of languages is a waste of time. It's mostly enough to just know two types, one static, somewhat low level language (Java, C++, etc.) and one dynamic, high level language (Ruby, JS, Python, etc.) I've decided that for me, those two languages will be Java and Javascript. Not because they are vastly better than the alternatives. But for the following reasons:<p>1) I already have years of experience in Java. And it's not a dead field. There's Java 1.8 coming out, new libraries, frameworks etc. And there's the added benefit that I can convince my workplace to adopt these things since they use Java. That way I can efficiently use my work time to make money and learn new technologies at the same time.<p>2) I also have years of experience in Javascript. And I've discovered that Node.js can cover all the areas that I wanted Python to cover. It's good enough for rapid prototyping web apps, command line scripts, and quick testing of algorithms.<p>I came to this conclusion after time spent fighting a futile battle to become good at Python. Learning the syntax was easy, there's nothing in Python that was difficult to understand. However, I ran into the following issues trying to truly master Python or any other language I don't use at work:<p>1) Zero reinforcement unless I spend my own personal time doing it. At work, I'm using Java and Javascript 40 or more hours per week. And those hours are when I'm at my most alert and energetic. Python could only be at night and when I'm tired. Marriage will reduce that free time, and kids will reduce it further.<p>2) Zero synergy from other developers. A workplace is also a community of developers. My Java and JS skills stay sharp and increase because I can constantly talk and discuss with other developers. I learn best practices, things to avoid, trends, etc. I get none of this with Python unless again I spend personal time to do it.<p>3) I made some small projects with Python. But a moment came when I realized, it doesn't matter, I'll never even come close to how good I am at Java and JS with Python. It was when I read some random post somewhere about how requests library is so much better than urllib/urllib2. And indeed it is. But if I had not seen that random post, how long would I have stayed ignorant until I found out? For someone who uses Python at work, such knowledge spreads quickly. Also just staying up to date on what's happening in the Python world can help gain such knowledge. I was already spending time keeping up to date with the Java and JS worlds. I just didn't have time to keep up with Python too.<p>I really liked Python a lot. It's a clean and practical language. But node.js fits much better with my skills and although I like the Python language better than JS, I'm a lot better at JS and will continue to be so since I use it at work.<p>I guess the TLDR of this is that yes you can try to learn and become good at a language and its community of libraries and frameworks in your personal time. But it's so much more efficient to just become better at the languages and frameworks you use at work and then use that experience to become good at new technologies for that area.<p>Perhaps the final breaking point that lead me to abandoning Python in my personal time is when I realized, I could've spent all that time building something on the side. I could've used my existing Java and JS skills to make an app or website or anything. And I could've done it fast, quickly, and with the confidence that comes from truly mastering development tools. Instead I wasted it to gain a useless amateur understanding of Python.
评论 #5357756 未加载
评论 #5360852 未加载
klibertp大约 12 年前
I'm sure that there will be people here complaining that the particular stack you're working on now doesn't matter, that a good programmer is a good programmer whether she writes code in Forth, Fortran or C (or Fortran in C).<p>This is true in the same sense that quicksort is faster than insertion sort - that is when we ignore <i>some constant</i> and are interested in asymptotic performance.<p>Very few companies are able to ignore this constant and hire someone who - being as good a programmer as he is - for half a year will be less then proficient and then for two more years will be still under-performing in some cases. Companies would be stupid to ignore <i>this</i> constant, especially given that in three to four years the programmer in question will leave for a better work.<p>For the vast majority of jobs it really matters what software stack you know and it's not really a bad thing to do for companies to check for that when hiring.<p>It's also worth noting that learning a language is something entirely different than learning to <i>use</i> a language. That's why it's that important to actually build something when learning - because then you are forced to use various tools that come with the language, it's entire stack.
评论 #5356700 未加载
xtrumanx大约 12 年前
I've been trying for so long now to do something different. The largest obstacle I've faced is letting go of expectations.<p>Having worked with Asp.Net MVC for years now, I've found how Express on NodeJS handles form validation to feel very cumbersome. Technically, it doesn't even handle it and one has to rely on third party modules or one's own wits. After struggling with that one bit for a few days I dropped nodejs and moved on. I enjoyed making ViewModels with DataAnnotaions in .net that two top validation related modules I looked at seemed weak in comparison.<p>Now I'm trying to learn Play! using Scala. But the IDE support isn't as good as Visual Studio especially in the View templates. I've only tried the Scala plugin on Eclipse. The Play! plugin in IntelliJ IDEA only works on the Ultimate version which sounds expensive so didn't bother looking into it.<p>I just installed Ubuntu on my computer and really want to make the switch from Windows+C#+Visual Studio to Linux+Scala+Play but all those years getting comfortable in .net I feel will really hold me back. Everytime I hit a wall I'll be thinking back at how much easier this would be if I was using .Net or Windows that I feel this will be my biggest problem I would face.
评论 #5357207 未加载
CHsurfer大约 12 年前
Wondering if GO would be considered a good candidate in the 'exotic' category.<p><pre><code> -People seem to enjoy programming with it -Makes somethings very easy (concurrency) -Standardized formatting, makes everyone else's code easier to read or vice-verse. </code></pre> Just not sure if people are doing 'work' yet or still mostly playing with it.
评论 #5356913 未加载
评论 #5356630 未加载
评论 #5356588 未加载
评论 #5357342 未加载
评论 #5356740 未加载
评论 #5356679 未加载
emehrkay大约 12 年前
"Fill your github with work in that language."<p>I love this advice. I think that I want to tackle building a Node application as my next "weekend project." I dabbled in the very beginning, but today, Node is very mature and the barrier to entry is extremely low.
评论 #5357534 未加载
jeremyjh大约 12 年前
&#62; Resist the urge to cynically compare and contrast the old and new stacks. I have interviewed too many candidates who could not stop talking about how great their old language is, or how “these new hipster languages are just a fad”.<p>I thought at first this was headed in the other direction - e.g. candidates who could not stop talking about how great their new language is and how their old language is "a dinosaur". That is the tendency I have - to inflate the advantages of languages that interest me most because of their novelty to me.
AlexeyBrin大约 12 年前
No matter how much you love a certain language you should always keep an open mind and learn something new.<p>If you are an expert in OOP, try to code for a few months in a functional language.
评论 #5356645 未加载
tterrace大约 12 年前
I wouldn't say a good escape route from a particular stack is to just jump into learning another one, you're just picking another small area of specialization. If you have a good understanding of the fundamentals, the data structures and algorithms under the hood, you're much more employable than someone who's memorized the idiosyncrasies of a few web stacks.
gtani大约 12 年前
i suppose by "exotics" he/she means<p>- <i>Theorems for Free</i> languages: haskell, scala, ocaml,<p>- lisps: CL, Scheme/racket, clojure<p>- logic programming/unification: prolog, mercury<p>- stack-based/concatenative: joy, forth, factor<p>- O-O paradigm: D, eiffel, smalltalk, scala(again)<p>- others I keep hearing about: Golang, rust, kotlin, Mozart/oz