Ask HN: Does this old horse have a few years of useful work left?
So... now I'm back to living on couches and wondering / researching where I might still be able to be useful and productive in the world. It's not an easy question. There are more technology stacks than ever, and I'm suffering very severe paradox of choice. I sure miss the "good old days" when you just focused on writing a single app in C that ran on a well-understood machine, or even a single well-understood OS API. But those days are mostly gone. Now it's all distributed, multi-level conglomerates of varied frameworks and languages sort-of working together. I can't decide whether I have any interest in that. I sort of envy the people who can simply state, "I am a Rails dev" or similar.
I feel a lot of pressure to pick a niche. Something. Anything. Because living on couches gets old, fast, and even more dire financial straits await after that. So I'm being driven by the stick, and not the carrot - which is an unpleasant position.
I found a great game (on Steam) called TIS-100, where you progress by writing small, well-defined programs in assembly language, for a strange, highly constrained imaginary processor. It's great for its pure distillation of machine-level programming. There was a time when people used to get payed for doing what you do in this game. In other words, I fear I'm getting old, and my career options have just begun to seem uncomfortable.
107 comments
[ 2.9 ms ] story [ 184 ms ] threadOr look into today's C: Go and Rust
P.S. I used Go for some projects last year and found the situation to be much better. The Go book that's available on the website reminded me of K&R ... readable in a weekend of two. This should be the criteria for new programming languages IMHO.
(I have my own grievances, which is why I'm working on a second revision, but feedback is helpful.)
Don't even get me started on Go. Most overhyped language ever, with some serious issues.
Example of places would include TI, Intel, Atmel, etc., and also hardware makers that use their chips.
As a somewhat older (42) programmer whose early career was similar to what OP is describing I've been focusing on embedded systems and most recently Android development -- granted, Java isn't C and there are quite a few things I dislike about the language (and moreso the AbstractFactoryOfFactoriesClass culture it tends to have) but it is (practically speaking) MUCH closer to the sort of desktop app development that we used to do than either of back or front end web development (which I also don't really enjoy).
http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAP...
I've designed RTL with FPGA, worked with embedded linux, device drivers, bare metal c and etc.
the problem with embedded is that :
1. There are almost no jobs when compared to other kinds of software development. All the embedded jobs have been outsourced for so long and I don't see this trend reversing
2. The pay is really low for what you're expected to do. Really, really low.
I've made this thread before the transition: https://news.ycombinator.com/item?id=8158023
https://remoteok.io/
https://www.producthunt.com/e/2015-trends-remote-work
As for the game, our very own patio11 and tptacek have developed something a lot like that but with the end goal of getting you a job aside from all the fun: http://starfighters.io/
More of different linux variants actually. Amazon, for instance, provides their own version called "Amazon Linux" which is based on RHEL/CentOS for their aws servers. I've also seen many use Debian for their servers (In fact, Debian/Ubuntu doesn't differ much technically on the server side, but Debian's simplicity and FOSS-friendliness drives many towards it).
Except if one is developing desktop software. Windows is pretty dominant at desktop, especially when considering enterprise, CAD and so on.
(https://www.tinkercad.com/)
OnShape is certainly an exciting experiment. If they pull through financially it will be pretty strong signal, IMO.
Your excitement is telling you that's the next thing you need to do. Following your excitement is actually the shortest path to what you want. Act on your joy to the best of your ability. If you look at all your options and realize that taking a walk or driving your car or calling a friend is the most exciting, then THAT is the thing to do. When you can take no more further action on that thing, then look around for the next exciting thing you have the greatest ability to take action on and do it.
Excitement is its own self contained kit and its own driving engine.”
I haven't had much problem with this. I don't compete on price because I can't bid lower than someone who has a cost of living 10x less than mine.
One thing I've learned is that the higher your rates go, the less the global market matters. Few companies are willing to pay for $100+ an hour out of country contractors.
Even if you're not charging that much, you can always find companies who are just more comfortable with someone in country. Many companies want someone they can reasonably fly in if the need arises, or just someone who is subject to the same legal jurisdiction if things to completely wrong. IP theft is a huge problem in developing countries and legal remedies are very difficult when dealing with international disputes.
The problem is that those 10x-less cost of living people can increasingly compete on quality too.
Without some sort of protection inside their own country, it's "yay" for businesses and "tough luck" for IT workers. The HB1 (or whatever) visa thing is part of that.
In the end, the situation is not good for those 10x cheaper people either, because it ensures they'll always stay 10x cheaper, as even if their country develops more, there will always be someone underdeveloped with 10x cheaper cost of living to bring their prices down too.
Then you have the legal issues I mentioned. Contractors in other countries are for the most part outside the reach of US courts in the case of contract disputes.
Although the situation is changing for the better in the .NET world, the hardware cost, obfuscated licensing and pricing issues still remain. I had to buy an i5 machine with SSD and 16 GB of RAM to get the same development experience with VS2015 that I had with Netbeans on Linux with 4 GB of RAM. Also, a project in progress went for ASP.NET MVC 5 + Azure SQL on Azure and I'm afraid every day that we might get hit with some unexpected performance or insane pricing issues after the launch. Even the reddit thread on /r/dotnet wasn't very encouraging with regards to that: https://www.reddit.com/r/dotnet/comments/46rgf6/do_you_run_a...
There's a good reason you don't hear of many new startups running on a .NET stack.
The first paragraph dealt with the 'poor college student in Eastern Europe' side of doing a project, where every dollar counts and must be scraped for. In that world, going for .NET was unheard of, but the situation is slowly changing with VSCode and vNext.
As for the second paragraph, even well-funded projects have limits. Sure, let's say the limit for cost is 50k EUR with 300 EUR/month expected hosting costs. How happy will your client be when your cloud provider changes their pricing scheme and hosting cost is now 10-100x as large? Or when the requirements change and you need to buy some $EXPENSIVE_PLUGIN for that and you are locked in with your technology stack to one provider?
Mainly speaking: why should someone make a company and build some website and fill applications and all that (always with the high possibility of rejection), when you can just do 'apt-get install <technology-stack>' or as an alternative, git-clone-configure-make-sudo-make-install for the same thing? It's all about barriers to entry.
I love C# compared to Java but I write more Java today because I hate Windows and want no part of automating cloud deployments to Windows target servers. So maybe one day when (soon?) .Net Core gets production ready in Linux I'll make the jump- but I'm not going to vastly increase my hosting costs for a language when all of the others can be done on a cheaper, more well suited system.
One of my old employers had 100s of installs of its VBscript, then ASP.Net, program, with a complicated salesforce-esque application that clients could customize themselves with extra code, so there was a wide range of code written by programmers of wildly differing ability. And they did all sorts of crazy stuff.
Almost all performance problems were SQL related.
In the 3 or 4 years I was there we had a bug with IIS once, some crazy specific thing, I can't remember it exactly but it would be like if you'd chose a very particular and obscure variable name and the value passed via query string was this one very particular value it would cause that thread to hang. Even that was fairly trivial to identify because a google search brought up an MSDN.
And when we were genuinely stuck by then we had some sort of partner status and could phone them up. When we were using silverlight when it first came out our technical director actually ended up chatting to one of their core programmers about a specific bug. I seem to remember this only happening with silverlight and with a very obscure tech we were using (some sort of strange clientside control that IE6 had that you wrote in vbscript that no-one really used that I honestly can't remember the name of now).
.NET is killer just killer.
You won't find many startups hiring someone to do the kind of work the OP is looking for, but there's still plenty of C and assembly programming going on.
Most countries need teachers, contact that department of the government and start from there. Get into a school, watch some lessons. Then get a teaching qualification.
I can assure that some people can still make a living as domain experts in limited niches.
Modern computing has become far too generalised for the same sort of development - without all the levels of abstraction you've encountered, it'd be nearly impossible to develop something in a reasonable timeframe. I'm not defending it, but I think if you tried to develop something using such classical methods, you'd end up taking 10x as long creating the finished product. Price of progress I'm afraid.
http://www.fsf.org/resources/jobs/embecosm-compiler-engineer
[1] http://www.launchhackathon.com/
Also I feel like a vast majority of the people would have to be part of the HN contingent, lol.
Of course it depends on what your definition of end-to-end is, as the rabbit hole can always go deeper.
[1] The department I work in is needed in our company, but it doesn't really fit in with the rest of the company [2], so finding a manager has been ... interesting as the only other person in the company that understands what we do is a vice president of the company who is busy with other work.
[2] The company as a whole develops software for Android phones. My department is there to support our software on the call processing side of things, so we get to deal with SS7.
No, those days are alive and well in the embedded/IoT world. I suggest you look into doing some embedded work, if you want to return to that style of development ..
Personally, if I have to go back to the circus, I'll probably aim for short contracts or part-time work. If you're looking to reskill, I see plenty of sys admin jobs out there. Except you're supposed to call them "Dev Ops" nowadays. Puppet, VMs, Vagrant, Ansible, cloud computing (Linode, Amazon, etc). It's a relatively small domain which is applicable to many different areas of IT, so you get that "good old days" thing where a little effort goes a long way.
Good luck with whatever you do. Don't let the demons of despair take you, make a deliberate effort to be optimistic and cheerful. You're not the only old horse out there wondering when it all became so complicated. OTOH, it's truly an incredible time to be alive, so much stuff going on!
That being said- I'd rather have someone transitioning to DevOps with more SysAdmin experience than Dev- the cleanliness and composition can be learned a lot faster than the networking, security, and other topics that most Devs have never had to maintain first hand.
Totay agree. It's a lot easier to pick up enough Ruby to be comfortable with Chef than it is to learn the thousands of different things about networking and security - and probably the OS your average developer has been using for a long time too - that a good sysadmin knows.
Maybe it's good vs bad but it happens. In the puppet/chef era I'd have said you needed to have a background in coding to be a good devop, but ansible has changed that now I think.
You have DEVops... think of a web developer who also knows linux.
Then you have devOPS... think of a sysadmin who knows bash and python.
The former is where I think the value comes.. they find ways to automate your infrastructure and do lots of cool things. The later tend to make webs of bash scripts that you have to delete when they quit because no one understands them.
All that because the webdev was learning new Csharp.JS framework like dozen before, being too busy to learn how package system or daemonization or networking or RPC or SSH or push vs. pull architectures worked and what they are good at, or what tools and why a seasoned sysadmin uses for automation.
What you really need is not a dilletante armed with sharp and pointy PHP-du-jour, but a system programmer. There used to be such a profession, the guys who wrote syslog, init, bash, grep, awk, libnss, and tons of other goods people today either use without much thinking or don't know existence of at all.
You don't have to really worry about framework, just pick one. Or you might end up reworking fundamental data structure code, which can be really fun for an exercise of algorithmic design.
On the other-hand, maybe it's time to go multi-disciplinarian, take a gig connected to, but completely outside of your comfort zone. Nothing put me into a state of panicked "I need to learn from the firehose" mode faster than this. I'm not even talking technical work, go be a manager, or an industry analyst, work on soft skills or liberal arts fields. Your old skills can provide interesting viewpoints nobody else has.
* JavaScript (ES6), Node.js and Express, React
You should also get a refurbished Mac Mini or Macbook, and start learning Swift for iOS development. Put together a few simple apps. There's a lot of jobs for iOS developers.
A lot of Rails developers seem to be moving on to Elixir and Phoenix. So I'd keep my eye on them, too.
You should pick JS, something server side (PHP, Ruby, Python, or Node.js) and react.
You'll spend a lot of time configuring libraries and services (webpack or webify) but that's just the way coding is these days. Anyone of us could code some assembler - like OP said, it's fun and easy. We teach our 14 years olds how to code assembler - it's that easy. You don't honestly think you can compete with those skills? You need to learn the hard stuff.
This is what you should do:
Learn all of the above Learn PhoneGap and cordova, use React to create an app. Pitch to companies to put an App out for their website. Use whatever server side tech they use (e.g. 90% of companies will be using PHP) to create a simple Web API for your app to call.
Not all paid programming is like that. Desktop + expert software = stable platform, can focus on implementing features on top of existing stack.
The real pain is that those who had stepped on this road have to always run at the top of their lungs, trying their best to catch up with this giant hipster bandwagon. The language and frameworks change every other day, with old code rotting away at an astonishing speed. Not everyone's cut for this kind of pace.
There are other areas than webdev, where things are more stable without stagnation.
Aside from rest of the comments, this is such a ridiculous comment that I can't tell if it's a joke or not. Have you actually built anything meaningful with assembly language?
I think that's why barely anyone uses raw assembly for any big pieces of code, unless they either have to (severe hardware constraints, lack of any compilers, or some specific needs) or want to challenge themselves. Higher level languages are there for a reason :)
This guy wants a job. That pays money. Are we all going to tell him that assembler is the path to riches? Maybe for 1% of guys out there.
You can write complex systems in either. I'm sure we could both come up with examples of complexity all day.
Except for making a JS engine that is fast enough to run your framework dujour.
All the leverage in high-level coding comes from the stability of the underlying layers. Even though those lower levels see less churn, we absolutely need people to maintain them, and these dev bootcamps certainly aren't churning out candidates who fit the bill.
> [You]: JavaScript (ES6), Node.js and Express, React
From the tone of original post, I highly doubt OP wants to spend time on that, unless the stick would hit him really hard. Something like embedded software development or telco/networking also pays, while could be a more pleasant experience.
Well, there are tons of places that use C developers.
Programming is programming, one language is not much different from the other. There are jobs for low level coder's ( think; drivers, kernel porting, RT ). Web has diverged 'front end' or 'back end' take your pick. Work remotely is another option. The niche makes it easy for the employment people to pigeon hole you. If you have that need do a couple of CV's tailored to that niche.
Don't believe the startup 'shit' that only a committed programmer can work there and you need to give 60+ hrs a week. If you get that spiel, get up walk out. They will use you and throw you away.
I've seen 60+ hr code, it's; crap, bug ridden, security nightmare. In the 'Agile' short term for a startup it's great for the long term...! Strange how Facebook changed their moto about 'breaking it' didn't they when it got serious.
I still come across young 'coders' who aren't programmers telling me that JavaScript isn't an Object language. Strange how the function is a first class Object!
I got asked in an interview recently if I could name a design pattern. I responded with "ow you mean 'Gang of 4', how about observer" the reply was " No not the old band and that's a newspaper" I laughed got up walked out. Then sent an email to the CIO telling him the reason his IT stank was that he had inexperienced people working for him. Strange that company no longer exists :)
Sometimes you got to 'pony up', do the 9-5 so have a nice hobby. Take the crap, but not for too long otherwise you start believing it.
When you find the right role you'll know. They don't always pay the greatest, the atmosphere is good, and you'll want to get up in the morning to do it.
Strike a life balance, your mind is your tool. Burn it out and abuse it then you'll loose it.
So you'll find me, sat at a cafe or bar along the Med. My laptop isn't the most modern (actually it's a 5yr old MacBook Air ). I'll be unpicking some crap code, putting in comments, and applying some old proven techniques. If you can stand the smell of Gauloise Disque Bleu, I'll buy you a beer.
It's more difficult work.
Its pretty hard to give any sort of advice with such little information. I'll just say you really can't fall in love with the technology but rather you should love solving problems... ie be technology agnostic. There are lots of real world problems still left to be solved.
I also have some doubts that you seriously took advantage of working at Microsoft. I can tell you working from home with my own company you really really miss learning from others. The idea making synergy and excitement of being around other smart people even if its only during lunch break is a huge highly underrated benefit long term.... and now you will be sitting on a couch.
I honestly can't figure out if it is your goal to just program simple little programs with assemble or C? Is that what makes you happy? Did Microsoft not challenge you enough? Again serious lack of information.
Of course, if you only love certain kinds of problems, that can be effectively the same thing.
As far as my goal - that's what I'm trying to figure out. For practical purposes, it may be mostly about avoiding webdev. However, this most recent job was not webdev, yet it was still an absurdly convoluted architectural hodge-podge. So, one thing I may be looking for is more homogeneity. It's not about size or complexity, per se. I've worked on many large, complex projects and had a good time.
What turns me off about webdev is a) new frameworks being hyped every month, and b) the architecture of a modern web app gives me a headache. I want to return to a time when I used to spend most of my time on data, algorithms, and writing code, with a single API being the worst "necessary evil" in the mix.