13 ms·
If you had to start over, what technologies would you learn in 2014?
- gizmo 13y agoIt 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.
- cmdkeen 13y agoI'd actually recommend a slight variation on the C# javascript combo - Typescript instead. There are all sorts of tools coming out that allow you to generate Typescript interfaces from your C# giving you really nice compile time safety through your entire stack. If you're writing C# then Typescript feels more natural, especially in Visual Studio it removes much of the painful context switching between a typed intellisense driven development and a javascript free for all.
- duncanawoods 13y agoI liked the idea of typescript but after frustration from fundamental issues I was very happy to bin it. i) Wrapper libraries - Sure you can download them from definitelytyped but in practice I quickly found all sort of incompatibilities and things not working when used on real versions of the wrapped libraries. I had to edit them based on suggestions from forums. They are unversioned community efforts - poor versioning and no package manager is just a nightmare given the dozens of libraries we have to use for modern JS. ii) Tooling - I thought this was the benefit and tried using it from WebStorm which claimed Typescript support. I found no meaningful intellisense only that it shelled out to the TS compiler in the background with some flakey syntax highlighting. The worst issue was that the compiler could regularly produce totally opaque error messages that were poorly located to the code issue and probably in the wrapper somewhere. iii) Arbitrary apis - this is what I thought I wouldn't face but it was. Just a single line of code trying to the most basic task of creating an express server took hours of googling for the magic incantation. Most advice referred to the wrong version. It appears there are javascript patterns that typescript wrappers struggle to represent so the authors have to invent new ways of offering an interface. Wrappers don't come with documentation... even if they did, you now have to read both the original and the wrapper documentation. Not cool. I hope some of this is now fixed but to have unreliable wrappers, no versioning and bad error messages means I am not hurrying back anytime soon.
- shadowmint 13y agoI use pycharm with typescript, and either I have a new version or the pycharm plugin is far different to the webstorm one. All the refactoring options, jump-to-symbol, type hinting, type completion and inline-error checking work really well for me. There are some pain points to be sure (modules, generics that don't quite work), but: - Emits known good javascript patterns, preventing javascript's typical '50 ways of doing something'. - Interacts cleanly and nicely with the existing javascript ecosystem. - The emitted javascript runs on old browsers, and is only marginally bigger than the source code, smaller sometimes, if you use interfaces - Clean module system (a little irritating to use perhaps, but still) supporting AMD and CommonJS (this is absolutely the future for JS dependencies). - Open source, installable compiler using npm. What's the alternative? - native JS <-- Not a bad choice, needs discipline to maintain code quality - coffee script <-- Interacts poorly with existing js ecosystem - dart <-- Doesn't run on old browsers, poor interop - emscripten <-- Massive output, poor interop I cant say I'm any hurry to add C# into the mix, but typescript has impressed me thus far, despite being from Microsoft.
- um304 13y agoI would really like to know other folks opinions on this point mentioned by the author: "The web will persist and the web will win."
- bsaul 13y agoThere was a very recent post here on HN about the way chrome guys wanted to add support for shadow dom features so fast that people in the w3c asked them to at least write some specification first. That post made me think that the web isn't going to win over native for mobile before at least two years, if not more. The specification process is both compulsory for the web to simply "work", but it's also very cumbersome. Another aspect is that mobile / tablette apps are moving from a "mostly read" to a "read/edit" usage, thanks to the exponential power gains inmobile CPU. That means what the web will have to compete against on mobile isn't facebook stream but rather full blown photoshop.
- rimantas 13y agoThe web will persist. But it won't win anything. Nor will native apps win anything. With time we will finally accept "the right tool for the job" stance and stop forcing round pegs into square holes.
- Spooky23 13y agoIt's not necessarily a conflict that has an end. Because web-based stuff is standards-based, you'll always have a lag between state of the art and what is available in a standard. IMO, that's a good thing -- it pressures the market to continue innovating. People at Netscape were talking about the web displacing native applications twenty years ago. That hasn't happened yet!
- _random_ 13y agoWell, there will always be at least two native apps - the browser and the server.
- izolate 13y agoI want it to win, but I'm not knowledgeable enough to gauge the accuracy of such a claim. To me, it seems the largest of native mobile apps on any platform have a web component of some sort. I'm in favor of application logic living on the web, with native apps used on the frontend for consumption.
- spamizbad 13y agoUltimately these things are a matter of opinion, but as a developer who knows C#, I'm not sure I'd bother to learn it again if I had to completely reboot my knowledge. I can understand the perspective of being pragmatic with regards to the job market, but while there are an abundance of C# jobs available, offers tend to be lower unless you're specialized in Sharepoint or very senior. Culture can be a challenge in those shops as well. "Professionally" I've worked the most with Python, JavaScript, PHP, and C#. Of those, I'd only keep JS and Python. I'd swap out C# and PHP for Clojure and C in a heartbeat. Probably not the best for job prospects but definitely the most fun.
- skrebbel 13y agoFolks, the big point of this article is not that Hanselman likes C#, it's that his list of options does not include Objective-C or Java. It's that he thinks that the web will win (over app stores). I strongly believe that he's right there. At some point, app stores had "discoverability" as an advantage over the web. This has been one of the strongholds of native app proponents. These days however, with the enormous amount of apps available on popular platforms, this discoverability feature has become a joke. It's akin to searching the 1999 web for interesting sites but you can only use a badly managed, bribe driven version of Yahoo. Whoever can make the Google of app discovery might make a temporary splash, but i bet that, not long after, people will return to plain old Google Search. You only need 1 major mobile OS to change paradigm and hide the difference between apps and web apps, and your mom won't care anymore. Given that the world's #1 mobile OS is made by the worlds #1 web company, this change is not difficult to predict.
- juu4 13y ago> his list of options does not include Objective-C or Java He mentions Java, twice. There is nothing wrong with making web-apps in Java, and there are some nice web frameworks to help doing that.
- skrebbel 13y agoHmyeah, you're right, he does. But I doubt he would've included Vala if Android apps were typically programmed in it.
- collyw 13y agoDepending on the type of web app you are making, there are generally better (more productive) tools for the job than Java.
- edwinnathaniel 13y agoIn general, the productivity gap has dimnished signficantly. Unless if we are discussing prototype/quick throwaway/very small web app. In that segment, Rails is still the king.
- almata 13y ago"Ultimately, we're all amateurs." - Wow, that's something I've been thinking a lot lastly. It's true that a good developer can learn a new language (or technology, or even paradigm) in a quite short amount of time, but at the same time, when we're constantly doing that it's true that, as an effect and as the author says, we're becoming permanent amateurs. I don't have a solution for this though (maybe there is no solution at all, or maybe there is not even supposed to be a solution).
- pistle 13y agoThe best we can be are professional on-the-job learners with a knack for clean implementations.
- acomjean 13y agoIts true. To quote a wise man at the php conference "I get the feeling we're just making stuff up that works" when talking about scaling sites. Its about being a professional in the way you handle the tools at your disposal. This has been going on for a while. It was noted last century that a job opening asking for "5+ years experience" in a technology that was 3 years old.
- iamyatin 13y agomy language would be python.. it's everywhere.. be it android, raspberry pi, scientific computations, and what not.
- alkonaut 13y agoI'd learn F# + C + Rust + TypeScript/ES6. Anything that lets me avoid learning C++ or JS.
- camus2 13y agoYou cant learn Typescript without learning how Javascript works. Typescript doesnt fix javascript issues, it just extends it. It means you'll get some nasty bugs in your code if you think you can just ignore javascript.
- alkonaut 13y agoI know you need to at least have rudimentary knowledge about js in order to use typescript effectively. But I think I already do (I just don't want to learn more as it makes my skin itch). More likely I'll just give up on the entire thing and wait until ES6...
- nly 13y agoOnce you know C, you've already gone through most of the pain with regard to C++s warts, but you still have to treat it as a new language. I really don't know why people have such a problem getting to grips with pure-C++ functionality like templates, virtual functions, inheritance, RAII, exceptions, references, type system oddities, rvalues and lvalues and their references, operator overloads, extended temporary lifetimes, smart pointers, runtime type information, the lack of decent unicode support, slow compilation times, binary compatibility which is tricky to maintain, member function pointers, virtual base class construction order, SFINAE, and static polymorphism and concept checking. It's really not that difficult... ;)
- sixbrx 13y agoYou had me until "type system oddities" which was a spoiler :)
- alkonaut 13y agoI don't mind the C++ that is "C with objects". What bothers me is the broken template metaprogramming, endlessly varying kinds of special pointers, massive libraries that does the same things slightly differently and so on.
- drdiablo 13y agoMy opinion on "the web will persist and the web will win" is that it's not a won battle. Native apps have always been smoother, giving users a better experience overall. On the contrary, mobile web apps have been bad, and haven't much evolved since we started having mobile devices (laptops don't count :p). I'm pretty sure that the future resides in mobile devices, and they can't rub the web, we'll have to use the alternative: native. At that point nothing stops Apple or facebook to go entirely native and therefore abandoning the web ideology (and the physical web). So I think that the web is a possible future, but nothing is settled yet, we need more groundbreaking ideas from the web to make it a desirable choice of future.
- _random_ 13y agoI think there are too many smart and capable developers in the world to settle on old poorly-upgradable languages for everything. So hopefully there will always be a choice.
- Thiz 13y agoCordova is the future and the future belongs to those who prepare for it today. Learn Cordova.
- colinramsay 13y agoYou could "learn cordova" but you'd have a massive gap in your skills. As the website says "Apache Cordova is a platform for building native mobile applications using HTML, CSS and JavaScript", i.e. you still need to lean HTML, CSS, Javascript and a backend technology.
- izolate 13y agoWhat makes you so sure Cordova is the future? Curious.
- Thiz 13y agoCode once, run everywhere. Discoverable, searchable, updatable, all the good qualities of a web app with the power and speed of a native app. Of course you need HTML, JS, CSS and the whole web stack, but the good thing is everybody already knows it. Standards are good. Apache is behind it, also Google, Firefox, Ubuntu, everybody benefits from a standard way of developing apps once, but very specially users, and coders. It has to be the future, it will be no matter what, no barriers will be high enough that a great idea can not overcome. Cordova is that idea.
- _random_ 13y ago"good thing is everybody already knows it" - so you recommend to learn something everyone else will know... I guess differentiation on the job market is not a part of this strategy. "everybody benefits from a standard way of developing apps once ... and coders" - my feeling is that it's 50% of HN spirit is building things in different ways. Just look at all those awesome languages, libraries and frameworks coming out every week!
- herghost 13y agoI think Virtualisation, Automation, and Orchestration technologies would be the best place to start again. I've seen some really impressive things done at pretty impressive scale with this stuff.
- mrmondo 13y agoPython - I believe it's the language of the now and the near future.
- camus2 13y agoPython is multipurpose and has great libs, but personaly I dont like the language itself. I think Ruby is a better designed language , but Ruby has problems too. Unfortunatly the perfect language + ecosystem doesnt exist.
- collyw 13y agoI think you would like Perl :)
- pouzy 13y agoMost studies are showing it. Mobile will make a big difference in the near future though, so the balance might change quite fast.
- ilaksh 13y agoMy favorite things right now which I am happy to recommend are ToffeeScript https://github.com/jiangmiao/toffee-script https://github.com/jiangmiao/toffee-script with Node.js and Nimrod http://nimrod-lang.org/ http://nimrod-lang.org/. I also think LiveScript is awesome. AngularJS is great. Web Components are better I think though. Docker has redefined devops in my opinion http://docker.io http://docker.io GLSL is very cool and something you can even experiment with in your browser using Three.js etc. I believe that real time ray tracing is going to be a thing within a few years http://www.youtube.com/watch?v=abqAanC2NZs http://www.youtube.com/watch?v=abqAanC2NZs http://www.youtube.com/watch?v=V5Y06xkRWio http://www.youtube.com/watch?v=V5Y06xkRWio CoreOS looks very interesting. WebRTC is a technology that could almost make an industry irrelevant. http://simplewebrtc.com/ http://simplewebrtc.com/ Understanding APIs around bitcoin and cryptocurrency in general seems important. I believe that the internet is eventually going to be switching away from normal named server structures to a content-oriented architecture. http://en.wikipedia.org/wiki/Named_data_networking http://en.wikipedia.org/wiki/Named_data_networking There are a lot of ways this category of architecture is actually currently being deployed behind the scenes, for example CDNs or bittorrent. I believe that we are going to start using that type of system more and more and eventually we will lose things like the HTTP layer. This may be combined with some of the technologies related to cryptocurrency. For an example of why we are moving to named data networking, take a look at well.. just about any web application that wants to scale. For example the npm registry. Also consider the issues around privacy with Facebook and the NSA, and the ability for governments to censor or take down web sites or domains. So any technologies that facilitate things like that, such as more traditional clustered SQL or NoSQL tools, or especially protocols and systems specifically designed for named data networking, will be very powerful. I like the idea of heterogeneous peer nodes that have everything they need built in and can connect to the network on their own. Another area that is really going to be key is artificial general intelligence. Notice I did not say machine learning. I think look at taking advantage of built deep learning systems like the one IBM has with Watson. Or look for deep learning, autoencoders, hierarchical hidden markov models, hierarchical temporal memory. But most practically for the next few years IBM and Google's (when Google releases it) cloud AIs are going to be game changing for many industries and harnessing them in software will be very useful. Qualcomm/Brain Corporation and some others also have some neuromorphic chip technologies that could be extremely useful. Any system that really takes advantage of next gen VR devices like Oculus Rift is going to be interesting.
- rip747 13y agoI've been doing ColdFusion for well over 13 years now. The reason I choose it was because at the time the only other web technology that looked promising was ASP and I _hate_ Visual Basic with a passion. Today I'm focusing all my attention on C# and Ruby. That all said, if I had to start over today... I wouldn't be programming, I go back to networking. As much as I love programming, it just doesn't amaze me anymore. I guess its the lack of physical interaction. I'm starting to dread typing on a keyboard for a living. I look at all my friends in networking and see all the cool toys they get to play with and want to jump in the sandbox.
- CmonDev 13y agoPick a job that will not get automated in 10 years.
- rip747 13y agocare to elaborate on what exactly you mean by "automated". I fail to see how installing physical hardware can be automated.
- viraptor 13y agoThe new keyword is SDN I guess - software-defined network. A lot of what was the standard in networking and hardware domain is migrating to software now. Especially when you're running many dynamic virtual hosts, you may want to move the tricky networking parts into easy to redefine software configuration on the host itself. This idea will get only more popular soon. Of course there are also products that allow you driving the physical boxes remotely - like openflow. I think the mix of those technologies will get quite important in the future. I'm not sure if that's what the GP meant though.
- CmonDev 13y agoClouds, software-defined networks, virtual machines etc.
- bitwize 13y ago.NET and JAva because that's where the money still is.
- taude 13y ago1) Any high-level language that runs in the Java VM. Because 1) there's tons of open source libraries 2) syntactic sugar for devs 3) operational stability of the VM 4) flexibility of running it on both open source and closed source OSes meeting a variety of business requirements. 2) A scripting language for gluing your operations together, for quick and dirty services, prototyping, etc...: Python 3) JavaScript.
- camus2 13y agoIs there a C# on the JVM ? it would be awesome.
- viraptor 13y agoThere's jvm for .net: http://www.ikvm.net/ http://www.ikvm.net/ and .net (clr) for jvm: http://xmlvm.org/clr2jvm/ http://xmlvm.org/clr2jvm/
- lmm 13y agoNot as such, no. Java (particularly post-8), Kotlin, Groovy, Ceylon and Scala cover various pieces of the territory that C# holds in .net-land.
- CmonDev 13y agoOr you could just pick a language with the best IDE support. Which leaves us with Java and C#.
- piratebroadcast 13y agoIm currently learning Rails and Javascript- Good to know I seem to have made a safe choice.
- LeicaLatte 13y agoApple has been around for 30+ years, are a 100 billion dollar company now and are here to stay. Definitely objective-c. Javascript because every device made today or tomorrow will ship with a decent javascript runtime. Then move on to the things you personally like.
- weavie 13y agoI would have thought that learning two languages at the same time.. especially with one of them being javascript would be a bit of a brain overload. I would just suggest sticking to javascript to start with. You can do front end, node and mobile. With that under your belt you would then be in a much better place to jump to a different server language and would know more about which one would be the best fit for you. But focus on one thing at a time, you'll learn much quicker that way.
- nly 13y agoC++14
- TuringTest 13y agoThe Functional Reactive Programming paradigm is going to hit hard. It makes parallel programming extremely easy, which is a huge bonus for multithreading (a great way to harness multiprocessors) and for loading web pages asynchronously. Libraries for this programming style are being created for almost any popular platform, and knowledge is spreading quickly. I recommend following some tutorial or online course on the subject.
- geogra4 13y agoSAP. It's not particularly exotic but it runs the world.
- mbesto 13y agoYou mean ABAP ;) Actually SAP is at a very interesting crossroad right now. You don't have to know ABAP anymore. If you can leverage SAP Gateway and check out OpenUI5 - http://sap.github.io/openui5/ http://sap.github.io/openui5/ you can make a name for yourself. There is heavy demand for this area right now and not enough supply. EDIT- If anyone is interested in this area, let me know!
- greendata 13y agoI'm a current python/ruby/javascript contractor interested in getting into SAS/ABAP consulting and development. Do you have any recommendations where to start?
- mbesto 13y agoI sent this response to a few people who emailed me already: Check out: http://scn.sap.com/community/netweaver-gateway http://scn.sap.com/community/netweaver-gateway http://scn.sap.com/docs/DOC-27405 http://scn.sap.com/docs/DOC-27405 Especially check out SAP Fiori - http://scn.sap.com/docs/DOC-41598 http://scn.sap.com/docs/DOC-41598 - this is SAP's unified workflow app. Basically SAP has put a lot of effort into taking it's old archaic back-end and making it "open", and Gateway enables backend systems like ERP/CRM/etc. to be able to talk to any RESTful front-ends (mobile, js, etc). Go ahead and play with their oData demo system: http://scn.sap.com/docs/DOC-31221 http://scn.sap.com/docs/DOC-31221 Let me know if you have any other questions!
- Thiz 13y agoI've wondered all these years why nobody has built a SAP open source clone and make money, tons of it, in consultancy. Ripe for disruption. Billions over billions.
- this_user 13y ago"Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. I am a failed stand-up comic, a cornrower, and a book author." A Microsoft employee talking up C#, what a surprise.
- d0 13y agoTo be fair, he does kick them down regularly on a lot of stuff. C# is one of the better bits of the Microsoft ecosystem.
- vinceguidry 13y agoIf you're in the US, learn whatever the hell you want. Then move to a biggish city and find a job using it. Bam, you are now equipped to take advantage of the biggest tech boom the country has seen since the 1800s. The 90s wishes they were this good.
- crazygringo 13y agoIf you're looking to maximize your choice of companies to work at, one piece of advice could be to focus on front-end instead of back-end. I'm equally proficient at front-end and back-end, but the last time I did a whole bunch of interviews, I advertised myself as a front-end programmer (since there aren't too many full-stack positions around). Why? As a back-end developer, you're limited to picking companies that match a single one of the three broad back-end categories -- generally Java, Microsoft, or "open-source" (PHP/Ruby/Node/etc.) -- since any programmer is usually only going to be really proficient in just one of those. If we assume companies are split 3-way, you're instantly limiting yourself to 1/3 of possible companies. But on the front-end, there's no balkanization. It's just JavaScript, JavaScript, JavaScript. It's not too hard to learn JavaScript and jQuery inside and out, and with some solid CSS experience, knowledge of good development patterns, and maybe a framework or two, you can interview practically anywhere.
- bjornsteffanson 13y agoYour assessment of the emerging front-end skillset is spot on. For better or for worse, if js frameworks are here to stay for the next few years (and it seems they are), the programmers who got in early are going to clean up as they are now sitting on 1-3 years of experience.
- lstamour 13y agoAh but then you get http://www.100percentjs.com/just-like-grunt-gulp-browserify-now/ http://www.100percentjs.com/just-like-grunt-gulp-browserify-... (and HN discussion) ... of course, despite this, I'm in your camp. Even as I'm doing mobile and now learning modern/ISO C++ for cross-platform development, the strengths that originally got me hired were in web programming and you can always pick up enough to work with views in one of the big technologies, be it Wordpress/Drupal (sigh), Rails (half sigh) or more abstracted GWT/ASP.NET components. (meh) That said, I'm not sure where the bar is, even in web. Writing Chrome extensions and apps? Javascript injection on mobile? Dart? Web Components? Ember? (ouch) Angular, or React.js? Or a certain company's stack like Closure? And don't forget security vulnerabilities and keeping up with OWASP checklists or UX improvements, prototyping in HTML. And then there's performance considerations, eg. what Ilya Grigorik writes about these days. And touch screens, mobile, responsive... Front-end has a lot of transferrable skills, but it's a complex beast too, often full of legacy code.
- moron4hire 13y agoTo start over again, I'd have had a much bigger focus on standards and open-source, standards-compliant software. Having been spoiled by Visual Studio, I now lack the patience necessary to setup a dev environment from scratch with Emacs or Vi or whatever. And no, Eclipse is not an alternative, though maybe NetBeans is, which are two statements I really wouldn't have said 10 years ago. I don't really feel like it's a case of Visual Studio having gotten significantly better. NetBeans has gotten significantly better and Eclipse has gotten significantly worse. MonoDevelop and Xamarin Studio are waaaaay too buggy to be useful. I find myself gravitating to a text editor like Geany or really anything that combines syntax highlighting, tabbed documents, and a file explorer. It's amazing how infrequently those three things come together (I'm looking at you, Notepad++ and Notepad2), or just don't work very well (Hi there, LightTable and DrRacket). While I like C#, the promise of quality cross-platform software with it is mostly a boondoggle. The hoops you have to jump through, and the state of the dev tools for Mono, just push me towards Java anytime I need a cross-platform desktop GUI app. And that's sad. Because it's not like Java does a particularly good job of it, it just does a site-better job of it than most anything else. I don't have a good enough handle on the C toolchain to pick up and run with Qt or GTK and cross compile for every platform. And nobody pays enough attention to desktop in basically any other language. Please, correct me if I'm wrong, because I'd really, really like to be wrong here. I suppose I could do [Pythong|Ruby|OCaml|Haskell|Racket]+[GTK|Qt], but it feels grating. It doesn't match. As far as I can tell, there is no GUI library that works well in functional languages--even a wrapper on top of an OO one. But again, correct me if I'm wrong. Please. Other than that, I wish I had ditched SQL Server a long time ago. Postgres is just as easy to install and use now, and has been for several years. I wish I had the balls to replace my clients servers with Postgres and just not tell them about it. They probably wouldn't notice. I wish I had never wasted time on Python. I wish I had kept gaming to my Playstation and stuck it through with Linux back in 2000. I wish I had not gone to college. Going to college meant I had to get a job that paid well to service my debt afterwards. And for where I lived, that meant I had to buy a car. Even still, being 22 years old and having only $35k in debt was far better off than most of my peers, and even better still than most of the kids graduating today, so I guess I'm not too badly off. But still, I think about the last 10 years and really wish I had been writing all of that software for myself rather than The Man. What the hell was the point of writing all those projects in college for the command line? 4 years of wasted practice on an interface only other programmers care about. It is such a fundamentally different paradigm, and most of my peers didn't transition well. I didn't transition well, and I've been either the most successful person or at least in the top 3 of my graduating class. I wish I had never stopped doing screwy shit in JavaScript. There was stuff I wrote in 1997 that people are pushing today as "the power of HTML 5!" If I stuck with it, instead of listening to my "betters" at work or in college, then I think I could have contributed a lot more. So, less about what specifically I would have studied, and more about not listening to what others have to say about what I should have been doing.
- FigBug 13y agoIf I could do it all again, I'd study a lot more math in University and probably end up focusing on something like Audio DSP. I think it's a pretty safe career choice since it's hard self learn compared to a lot of other fields, meaning competition is less. And if you are good, companies will happily pay you to learn tech of the week.
- dankoss 13y agoLess competition, but also less demand and less career options. Source: This is what I do.
- stiff 13y agoThis idea that a software engineer picks a language as his "favourite" and becomes a "Ruby developer" or a "JavaScript developer" ever since is completely misguided, and I'm sad to see it cherished further in this article. Languages are tools, and tools should be picked depending on the project: its application domain, performance requirements, availability of libraries for important subproblems that have been identified, target platform, etc., there are lots of very concrete factors to look into. Completely ignoring those factors in favour of choosing your "favourite" or one of just 2 languages you happen to like, is going to have suboptimal results. A good engineer knows a lot about programming languages in general (what is taught in a university "Programming languages" course), has basic experience with a huge number of languages, and picks the programming language for the project based on this knowledge, based on research and on prototyping, that's how I see it. I recommend looking back at Marvin Minsky's 1970 Turing Award lecture "Form and Content in Computer Science". Little has changed since: The trouble with computer science today is an obsessive concern with form instead of content. http://web.media.mit.edu/~minsky/papers/TuringLecture/TuringLecture.html http://web.media.mit.edu/~minsky/papers/TuringLecture/Turing...
- xiaoma 13y agoLanguages and frameworks are tools, but they're tools that require significant time investment to master and there are too many of them to master every one. There are many, many cases in which a given person's "optimal" language to use for the task is different than the "optimal" language would be if the user were somehow equally skilled in all. Obviously, if the project is far outside the sweet spot of a given programmer's favorite language, it's worth it to learn a different one. The larger the project, the more often this is true. If for example, a Java specialist wanted to build a webapp, it would likely be worth it to invest the effort to learn how to do so with JavaScript instead of sticking to the familiar GWT. But for a smallish text manipulation task, it's just not worth it for an expert user of Ruby (a pretty good text manipulation language) to learn Perl (a language really designed for text manipulation). The sweet spot, in my opinion is to work at getting very good at one language per major domain area and change focus only for large projects, for projects far from the sweet spot of any already known languages or for fun.
- 13y ago
- habosa 13y agoIf I could start over and pick one language, it would be Java. If I could pick two or three I'd add Python or Ruby but let's stick with one. Everyone knows Java is great (or at least pretty good) for "building large systems" like the article said. You can learn a lot about software engineering from all of the practices that have built up in the Java community over the years. Note that I'm not talking about gross JavaEE stuff, but just good, solid OO programming with an incredible about of libraries for whatever you need. The real reason I'd push for Java is Android. Android programming is an incredible way for a newcomer to get non-trivial code in front of a large audience in a production environment. Writing an Android app has a decently steep learning curve, but once you get the hang of it you can really make progress quickly. Then you can publish to the Google Play Store with no app review, no $99 fee, and no Mac required. You'll get some downloads and real feedback on almost any app. The first app I ever made was a total piece of shit and it got 50,000 downloads. It had a ton of bugs that people asked me to fix and it taught me how to make something that people actually want in an environment where I had nothing to lose. Even ended up making a few hundred dollars on ads which 18-year-old me thought was pretty damn cool. There is an intoxicating feeling when you realize that a few hundred or few thousand people out there are running your code in their pocket, and it makes you want to create even more. It's the same with iPhone/ObjC I'm sure but I think Java has more other uses and Android is definitely a less intimidating platform for a beginner to just put something out there.
- interstitial 13y agoI'm sorry did you ask what technologies, or what over-arching philosophy of self-improvement vs. pragmatic career development we should debate?
- stcredzero 13y agoThe sweet spot for Bang for the Buck, for a typical programmer, would be Go -- then use it in a functional style. (Except for in strictly delineated circumstances, the entire code base should have zero side-effects outside of the current function scope.) This gives you a safe, easily concurrent language, plus most of the benefits of functional programming, but without as shallow a learning curve. (Meaning not as hard. Learning curve is not an analogy for a steep road! Height = stuff learned!) You also get very good debugging. (gdb and cgdb in particular) I'm writing my current project in Clojure, however, because it has most of the advantages of the above, but the available GC technology for the platform is far superior. (You'll have to learn some new debugging tricks, however.)
- pouzy 13y agoI like Python. It took me a while to get out of PHP, so I guess I'd drop PHP to jump directly in Python. But most of all I'd learn how to fix a car. They are such a pain when they break.
- pouzy 13y agoHo, and most definitely mobile languages. That will all put us out of our job if we can't move into that field.
- chaudruc 13y agoExcel, Powerpoint, SQL Business tools.
- buzaga41 13y agoSports.
- spitfire 13y agoI'd learn computer science, again. Languages come and go, the core tools for thinking are solid foundations. Then I'd learn Lisp, Python/Ruby and Mathematica.
- room271 13y agoI would learn (as someone who is interested in backend stuff - scalability, high-performance systems, apis) related to web-work: - HTTP - C (because it teaches you how computers work a bit) - One of the new JVM languages (either Clojure or Scala, preferably the first) - some bash (for scripting) Realistically that is a lot to learn in a year. On top of that I'd start dabbling with Javascript but not expect to learn it this year (that's for next year).