1. Learning (fundamental) stuff deeply is the way to become great.
2. But knowing how stuff works fundamentally at an abstract level (e.g. being able to write your own toy OS) is not directly economically useful (and/or very time consuming to get to that stage). So it won't get you a job.
3. So for starters learn just one thing that people actually use (say git) deeply at a concrete level. That is economically useful, because most devs will only have fairly superficial git skills, so you becoming the go-to person for git will provide economic value to the company.
4. At the same time, this is an effective way to bootstrap a more abstract deep understanding. E.g. if you really master git, you will also learn a fair amount of abstract concepts that go beyond the concrete tool (deep understanding of git implies the ability to implement at least a toy version yourself, which will teach you useful stuff; in particular if you can implement your own version of git you are probably already better than 90% of programmers).
5. Be mindful that you will be blinkered at this stage (because you only know a single thing and thus lack a basis for comparison), so don't become opinionated yet.
I think this a great early career strategy as long as you pick the right thing to deep-dive into. E.g. if you picked AspectJ or Agent Learning or CASE tools or the semantic web around 15-20 years ago (at the peak of their hype-cycle), this possibly wouldn't have worked out so hot. In particular, learning some things like Spring or Freudian Psychology will probably harm rather than help your intellectual development.
Making a good pick is hard if you lack experience; I'd say if in doubt pick something really everyone in your line of work uses but most people have not mastered and where there is value in mastery (and you can see how mastery might tie into things you want to learn more about at a fundamental level). Also, preferably pick something that has been around for at least 5 years (unless you are quite confident in your nose for trends).
- Soft skills matter, but performance (against your metrics) is still what matters in the end. Group dynamics only comes into it when you have a bunch of people at the same level of performance.
- You'll be ahead of a lot of your peers if you stay positive and don't gossip and don't do office "politicking" (in a bad sense).
- Plan your career around three year stints. At the end of each stint, evaluate your career progress against your long term goals. Don't be afraid to transfer jobs or take time off for learning (e.g., by getting a graduate degree).
You need to learn about control and responsibility. See, you have become responsible for your work, but you were not in control of it. Your employers have controlled it, and you let them by not pushing back on their decisions, which is understandable if you need work. I've done it. The problem is you are also now responsible for this work, because your name is on it. You're now screwed because the rest of the world assumes that you were both in control and responsible.
That's how you got in this situation, and the sad thing is, that's how it usually goes. You work on whatever projects you can find, never really getting anything challenging or even in good taste, and then when you go to get your next job you have nothing to show for your work. Cycle repeats.
The way you break out of this pattern is with open source. Open source lets you be both responsible and in control. You choose what you're working on, you do the work, you get your name on it. It's all you. You can start your own project, work on someone else's, and even blog about it. You get the recognition and you get experience with people interested in the new stuff, not the crap you do at work.
This is how I've had to work for a decade or more. Nobody I work for is interested in letting me do something interesting or challenging. I go to work and work on very mundane things, and then go home and write advanced algorithms to create web servers and bizarre protocols for fun.
If it weren't for open source, I'd still be working as an enterprise Java douchebag. Open source and writing literally saved me from the "industry" more than once and kept my love of code alive long past any love of the job.
Suppose one reads a story of filthy atrocities in the paper. Then suppose that
something turns up suggesting that the story might not be quite true, or not quite so
bad as it was made out.
Is one's first feeling, 'Thank God, even they aren't quite so
bad as that,' or is it a feeling of disappointment, and even a determination to cling
to the first story for the sheer pleasure of thinking your enemies are as bad as
possible?
If it is the second then it is, I am afraid, the first step in a process
which, if followed to the end, will make us into devils. You see, one is beginning to
wish that black was a little blacker. If we give that wish its head, later on we
shall wish to see grey as black, and then to see white itself as black. Finally we
shall insist on seeing everything -- God and our friends and ourselves included -- as
bad, and not be able to stop doing it: we shall be fixed for ever in a universe of
pure hatred.
I can relate, and agree front-end frameworks and tooling feel overly complicated.
The good news is that there is another way. It's completely feasible to develop without any tooling but a static web server and a browser nowadays. Just bundle for production.
I've developed [1] (a +10k LoC chat app) and [2] (a small web app) using just a 600 LoC template library [3] (which I should really extract), and I vastly prefer it over more traditional setups. Being so close to the browser makes it so easy to see what is going on. I've never spent hours or days debugging the infrastructure code because there is barely any, which is usually what ruins the fun for me.
Everybody is different, but for me the accidental complexity of the commonplace front-end stack (webpack, react, typescript, ...) isn't worth what you get out of it.
Just my 2 cents. I run a small software business that involves a few moderately-sized databases.
The day I moved from a fully managed hosting to a Linux VPS, I have crontabbed a script like this to run several times a day:
for db in `mysql [...] | grep [...]`
do
mysqldump [...] > $db.sql
done
git commit -a -m "Automatic backup"
git push [backup server #1]
git push [backup server #2]
git push [backup server #3]
git gc
The remote git repos are configured with denyNonFastForwards and denyDeletes, so regardless of what happens to the server, I have a full history of what happened to the databases, and can reliably go back in time.
I also have a single-entry-point script that turns a blank Linux VM into a production/staging server. If your business is more than a hobby project and you're not doing something similar, you are sitting on a ticking time bomb.
Seems an appropriate time to post my favourite piece on news addiction by Charles Simic in the NYRB.
"I’m having trouble deciding whether I understand the world better now that I’m in my seventies than I did when I was younger, or whether I’m becoming more and more clueless every day. The truth is somewhere in between, I suspect, but that doesn’t make me rest any easier at night. Like others growing old, I had expected that after everything I had lived through and learned in my life, I would attain a state of Olympian calm and would regard the news of the day with amusement, like a clip from a bad old movie I had seen far too many times. It hasn’t happened to me yet. My late father, in the final year of his life, claimed that he finally found that long-sought serenity by no longer reading the papers and watching television. Even then, and I was thirty years younger than he, I knew what he meant. What devotees of sadomasochism do to their bodies is nothing compared to the torments that those addicted to the news and political commentary inflict on their minds almost every hour of the day."
Edit: Charles Simic is a Serbian-American poet who lived through WWII and saw some really grisly things, some described briefly in the article, hence "after everything I had lived through and learned in my life..."
I just started using Mastodon and I'm pretty impressed with it as a product. But I think you need to approach it in a different way from Twitter and Facebook to really see all the benefits. If everyone just signs up to a major instance like mastodon.social, some of the problems you see on platforms like Twitter and Facebook will just be re-introduced as the number of users grows.
The programmer/artist Darius Kazemi has done a great job articulating a way to use decentralized social networks like Mastodon in a "human-centric" way: "How to run a small social network site for your friends." [1]
I really hope the Fediverse can succeed and thrive, and Mastodon is a big part of that.
Everything you say is true, but unfortunately a viable economic model for social networks that doesn't make use if the dopamine hook hasn't been discovered.
I've always gotten by (both before and after WSL) with a Slackware install running under VirtualBox on a Windows host. It goes something like this:
Install VirtualBox, create a Linux VM instance and configure for at least 2GB RAM, 3D video acceleration, 128MB of video RAM, and at least 20GB of storage. DO NOT choose EFI or any other fancy/experimental features; the reason we're using Slackware is because it is dead simple and bulletproof in its default configuration, and doesn't need any of that mess.
Install Slackware on the VM instance (I prefer Xfce desktop as it integrates well with Windows in Seamless mode but use what suits you if you find another is better).
If using Xfce: Remove the bottom panel but keep the top panel, and configure it to your liking. If using KDE you may wish to move the bottom panel to the top edge.
Install the Guest Additions for Linux.
Activate Seamless mode, you'll find that your Linux desktop sits as a layer on your Windows desktop. If you use Xfce, your top panel will be at the top of the screen and will by default float behind any Windows-native windows. This allows you to keep both OSes running all the time and switch back and forth as necessary. Optional: Install the Numix GTK themes and Numix icon themes available from slackbuilds.org for a more Windows 10-esque look and feel in your Linux native apps.
Again, the reason I use Slackware for this (besides my nearly two decades of familiarity with it) is because it is simple, stable, and stays out of the way. You don't need any experimental VM features; it's pretty much pure Linux. That said, something like Alpine or Arch may be more suitable depending on your workflow, and they both are also simple and VM-friendly distros. Alpine in particular is designed to integrate with VM and container setups with minimal fuss.
1. Learning (fundamental) stuff deeply is the way to become great.
2. But knowing how stuff works fundamentally at an abstract level (e.g. being able to write your own toy OS) is not directly economically useful (and/or very time consuming to get to that stage). So it won't get you a job.
3. So for starters learn just one thing that people actually use (say git) deeply at a concrete level. That is economically useful, because most devs will only have fairly superficial git skills, so you becoming the go-to person for git will provide economic value to the company.
4. At the same time, this is an effective way to bootstrap a more abstract deep understanding. E.g. if you really master git, you will also learn a fair amount of abstract concepts that go beyond the concrete tool (deep understanding of git implies the ability to implement at least a toy version yourself, which will teach you useful stuff; in particular if you can implement your own version of git you are probably already better than 90% of programmers).
5. Be mindful that you will be blinkered at this stage (because you only know a single thing and thus lack a basis for comparison), so don't become opinionated yet.
I think this a great early career strategy as long as you pick the right thing to deep-dive into. E.g. if you picked AspectJ or Agent Learning or CASE tools or the semantic web around 15-20 years ago (at the peak of their hype-cycle), this possibly wouldn't have worked out so hot. In particular, learning some things like Spring or Freudian Psychology will probably harm rather than help your intellectual development.
Making a good pick is hard if you lack experience; I'd say if in doubt pick something really everyone in your line of work uses but most people have not mastered and where there is value in mastery (and you can see how mastery might tie into things you want to learn more about at a fundamental level). Also, preferably pick something that has been around for at least 5 years (unless you are quite confident in your nose for trends).