Things I learned as an engineer that I wish I had known in grad school
medium.com
medium.com
4 is interesting. I was THE stakeholder in my thesis project, being literally the world's leading expert on that very narrow field and being the one who would benefit or suffer the most after its success or failure. Now I'm working in the software industry and I have a lot less autonomy and responsibility.
This is what's so funny about #2 and #5: they are at odds. If you take pride in your craft, you can't possibly feel good about 'just shipping' something out the door. The phrase 'just ship' is literally saying you're giving up caring about anything else to only focus on delivering a product. Where's the pride in your work? Where's the respect given to the other employees who have to deal with your output?
There is a time and a place for 'just ship', but it should never be a constant. If you'd like to reduce the costs of the company (by not having to spend as much time/money on maintaining 'just shipped' products), and help your co-workers feel better about the work being done, try to focus on the design and implementation more and produce something of real value.
In my opinion leaving your comfort zone often, so becoming kind of a 'generalist' is a good strategy only if you can learn subjects quite deeply quite quickly, which needs some kind of raw intelligence. Among the successful scientists/engineers only the the extremely intelligent could be successful in relatively different topics in my opinion.
If you want to be a Python specialist, for example, working at a job where you do exclusively Python and you get paid more and more as you gain expertise, then your time is probably better spent learning Python and not branching out.
If you're more of a "full-stack" developer, you might continue to learn new languages and paradigms, understanding the underlying concepts but maybe never learning language-specific fringe cases. Someone who does this might enjoy learning, and might prefer to switch things up and change jobs every few years.
If you want to start your own company, you'll probably want to be even more of a generalist, not focusing on development entirely. You might have a bit of a specialty in one area (software development or sales), but you'll want to know enough about all areas of running a business to be able to understand what's going on -- but you might want to hire the experts to know and learn more about any one of the areas than you do.
I'd disagree based on experience, not that I'm a successful generalist idiot (although I might be) but its extremely well known in the field, that learning your 8th language or 4th paradigm or 1000th fad or whatever is about 10x easier than learning your 2nd.
Learning one language is hard, but it scales back rapidly. How many different glyphs and syntax and formatting style can possibly exist to describe recursion, or addition, anyway?
Experience compounds.
> An illustration software: I personally prefer Inkscape, but the industry standard Adobe Illustrator or newcomer Sketch are just as good. Use it to post-process your plots and graphs; it’s often much easier than writing plotting directives in Matlab or matplotlib.
This is something I've been grappling with for a while. It's true that plotting directives are an awful pain, especially when hopping between different graphing options for different specific problems, but on the other hand they do make re-producing the graph when you have new data wonderfully straight-forward. I still don't know what the best workflow is here.
The best candidate seemed to be Sweave+ggplot, but it's very slow to produce complicated graphs, and certain kinds of data manipulation in R aren't as easy as in Matplotlib/SciPy, so I'm going back to IPython notebooks now. But I really haven't found a great solution.
As an aside, there's a good GUI/scriptable graphing app for OS X that just had a major update here: http://plot.micw.eu It's a bit quirky, but it definitely fills a niche.
What if your passion is not something that pays money? You need money to live, why can't a job just be a means to an end?
Anyway in article context I followed rule #2 in having great pride in doing an excellent job, I just happened to be doing carpentry for fun at the time. Was not being an evil programmer by not being attached to a keyboard for those two hours.
The TLDR of the whole article seems to be if you develop discipline then when you need discipline you'll be better off than undisciplined folks. Or if you train hard all the time, work becomes easy, which is crucial during rough times.
Aha--Nicely put. The dynamics of premature optimization by gatekeeping functions is always a good topic of debate.
I have never used Sublime text but this honestly surprises me.
To be productive you want a steep learning curve.
>Sublime Text is a great editor with a much lower learning curve than VIM or Emacs.
But when it comes to software engineering the gulf is even more severe and important. Firstly, computer science theory is extremely rarely applicable to software development, and is far less a suitable foundation for a typical career in industry than typical science degrees are. Secondly, the highly specialized knowledge and skills necessary to become even just a basically competent software developer are sufficiently large and requiring of expert instruction as to be comparable to many professional trades.
But there are a few problems here. For one it's just not practical for employers to attempt to use on the job training to force feed new hires that knowledge, as it would require education in lieu of productive work to the tune of maybe 2 entire developer-years, give or take. For another, it's also not practical to try to back feed a trade-school education into typical CS degree programs. For yet another, most attempts at trade-school software development educations are huge failures. Partly because almost no one with enough smarts and talent to actually become a good developer would attend a trade school, and partly because there's no agreed upon objective standard curriculum for development as a trade. Currently the best way to learn is through apprenticeship (decidedly hit or miss) or autodidactism (currently the most prominent method).
Of course another side effect of this is that because the most important education a developer receives is a subjective, informal, mostly undocumented one it is almost impossible to tell how good a developer or even whether they are fundamentally competent in the trade just by looking at their credentials.
For various reasons these conditions will continue to prevail for some time. Personally my bet is that humans will be living on Mars before these things are sorted out, but I could be wrong.
> Of course, there’s also the point where you’re just overwhelmed. That’s the panic zone. That’s where you’ll black out. That’s where all you can do is to try to keep your head outside the water hope somebody will safe you.
Too often I hear the 'leave the comfort zone' argument. But finally opposite side is also mentioned - panic zone.
As of recently leaving comfort zone I was completely lost, damaging my self-confidence. Afterall, I might have walked too far, into panic-zone. Shall take one step back and try again.
Really good pointers by the way especially the one about not selling your soul and approaching your discipline like it is a craft.
Is this good advice? We generate a TON of graphs and charts in academia, and treating them like "design" objects seems to be a lot of work. Worth it? What is industry standard practice for good looking data viz?
Also I think "Talent Is Overrated" by Geoffrey Colvin makes similar points and definitely recommend reading it.
Very good ideas, very clearly explained, thanks to the author.
https://ieeetv.ieee.org/meet-the-authors/carl-selinger-stuff...
I disagree with all this part. The way things are going, being a jack of all trades will only make you irrelevant very quickly. The market needs experts, and being an expert means focusing on one thing and one thing only. You should only learn new tools if they're relevant in your field of expertise and if they're widespread or there's a good chance they might be in the future. Otherwise, you're just wasting time.
Being a jack of all trades is not a bad thing most of the times. It helps give you a better understanding in the end.
The specific demand is invariably for a particular technology or platform, because management wants to solve their pain point right now and want to manage risk. The problem is that those experts are not super useful in five years when the platform changes (or three years, or six months).
Better to be an expert as using different technologies and getting up to speed quickly.
Yes, I still see some job postings that list "8+ years with (niche technology or framework)" (I say niche because asking for 8+ years with something like Java or Ruby isn't exclusionary to generalists, it just means you've predominantly focused on a single ecosystem), but far more often I see "X preferred" "Some exposure to X, Y, Z, or similar preferred", etc. You still want to have deep understanding of a few key technologies, sure, but there's risk hitching yourself too closely to a given tech while excluding everything else that's out there.
For example, a few summers ago I decided to make a web page for each and every national anthem in the world. A huge website network of national anthems, and later I would add audio.
The story of why I came up with this idea is here: http://ohcanadaanthem.com/story-oh-canada-anthem/
I only managed to do 5-6 anthem pages (Great Britain, USSR, Canada, a few others) before I became completely preoccupied with trying to secure the Star Spangled Banner lyric site. The site was being hacked constantly.
I finally took them all down - except the "Oh Canada" website (my home country) which comes in handy for my own use: http://ohcanadaanthem.com/