3 ms·
It depends on your goals. If your goal is to do a startup, then the obvious choice is to really master an entire web stack. For instance linux / nginx / python
by gizmo 13y ago
It depends on your goals. If your goal is to do a startup, then the obvious choice is to really master an entire web stack. For instance linux / nginx / python / html / css / javascript.
If you want to do research in computer graphics, then you better learn OpenGL and C++ or .NET. Want to work in embedded systems? C.
Scott's recommendation of C# & Javascript is a solid and pragmatic choice, good for those looking for a safe career in software. But it's certainly not the right choice for everybody, and even 30 years from now there will be plenty of challenging opportunities that have nothing to do with the web or javascript.
- shanselman 13y agoAgreed and well-said.
- ardfard 13y agoAgreed too for your opinion about how to do a startup. But I want to add C to your full stack suggestion. Sometimes it pays off to know low-level details about your choice of technologies. Almost every important technologies that I know is implemented in C.
- gizmo 13y agoNo doubt, knowing C always helps. gdb and strace work where other tools fail. In order to be a well rounded developer you ideally have familiarity with functional programming, declarative programming, lisp, and a much more. You hit diminishing returns pretty quickly though.
- collyw 13y agoWith the exception of SQL, are there any mainstream declarative languages?
- chriswarbo 13y agoI hear that HTML is becoming popular these days.
- pestaa 13y agoIt's more like a markup language, though.
- erichocean 13y agoI'm rewriting our Node.js based server in a combination of C and LuaJIT as we speak. The performance difference is absolutely astounding, in part because our Node.js app relies heavily on compiled modules, and the cost to cross from JavaScript to C++ and back is obscene. The straight C implementation looks like it'll be over 1000 times faster for our use case, which involves tons of buffer manipulation and usage of compiled modules.
- ilaksh 13y agoHave you seen Nimrod? http://nimrod-lang.org/manual.html#foreign-function-interface http://nimrod-lang.org/manual.html#foreign-function-interfac... https://github.com/Araq/Nimrod/wiki/Nimrod-for-C-programmers https://github.com/Araq/Nimrod/wiki/Nimrod-for-C-programmers http://nimrod-lang.org/ http://nimrod-lang.org/
- erichocean 13y agoI hadn't, looks interesting! We're actually building on top of Snabb Switch[0], which is giving us another 10x improvement on beefier hardware (2x$2600 CPUs, vs the single socket, $800 CPU we're using now). Our current engineering goal is 1 million full transactional, ACID-compliant writes per second, and 10 million reads per second, on a single dual-socket E5-2697 v2 box. That's a line rate (for our application) of just under 24Gb/second, which we're handling with a single 40Gb Ethernet adaptor. Obviously, we did not think Node.js would get even close to this, but we did think it would at least work for a month or two for 10,000-50,000 users. Sadly, it's only got us through development and now that we've submitted the app to Apple, the server is being rewritten from the ground up for adequate performance. If Node.js's performance had been closer, I probably would have spent time optimizing the Node.js server, but it's so far off right now that it's just not worth the effort. The Snabb Switch port is expected to take less than 10 days total (we're already 5 days into it). For better or worse, the way we've been designing even high performance servers like nginx is just out-of-date. Intel made a huge push to replace custom, ASIC-based network processors with E5 Xeons, and the software development in the larger community just hasn't caught up yet. Snabb Switch, for example, has a wire-to-wire latency, in LuaJIT, of just 26 nanoseconds. For reference, that's about how long it takes a photon of light to travel 25 feet. When messaging speeds are that fast, the Linux kernel is an enormous source of inefficiency, and even TCP is less than ideal (we use a UDP-based protocol with full public-key encryption per packet). [0] https://github.com/SnabbCo/snabbswitch https://github.com/SnabbCo/snabbswitch
- donniezazen 13y agoCan you do without only Python and its framework for programming side? As someone new to programming, I find it mind boggling how folks suggest learning multiple languages. Or does it become natural after you know one language very well.
- Kronopath 13y agoIt definitely is easier to pick up other languages once you know how to program well in one of them. You start to see the commonalities, the similarities in overall structure, and you can draw comparisons between the languages you already know and the ones you're learning. Learning the first language is the hardest, I'd say.
- jafaku 13y agoTo give you an example, after having programmed for years with PHP and Javascript, having learned many design patterns, and mastered a few frameworks, I picked up Ruby and RoR for one particular project and didn't have any major troubles. In about 3 days I was programming at full speed again.
- Silhouette 13y agoThe thing with programming languages is that while they sometimes look very different cosmetically, they often share similar concepts under the hood. IMHO, you won't go wrong learning one language reasonably thoroughly as a starting point. In fact, I'd recommend it for several reasons. However, sooner or later, you'll probably hear that another language might be more useful for another project you want to do, and maybe then you'll learn that second language too. As you do, you'll notice similar ideas cropping up, even if they go by different names or use different syntax. As your experience grows, you start to think of each programming language as being roughly in this family or that family in one respect, and maybe being like these other languages or those other languages in some other respect. You also probably notice more what still makes each language distinctive, whether it's a few idioms that make writing a certain style of code easier, or maybe a couple of unique features that aren't widely available in other languages that are otherwise quite similar. In the long term, it's these distinctions that make it useful to know several different languages. Even then, most of the languages you know will draw most of their tools from the same toolbox, and learning when to use a hammer and when to use a screwdriver will be more important than which brand of hammer or screwdriver you buy.
- adestefan 13y ago> If your goal is to do a startup... I'd only amend this to say "web startup." While HN is very web-centric there are a lot of other startups out there that have nothing to do with the web.