|
|
|
|
|
by monaghanboy
3108 days ago
|
|
i'm self-taught, ph.d. dropout in math. i work for a unicorn in silicon valley; i've done full-stack development and lately devops and cloud infrastructure. learn enough python/java to go through the entirety of http://nand2tetris.org/; this will help you understand basic computer architecture. from there, you can pick and choose from among the courses in https://teachyourselfcs.com, but i'd recommend taking at least computer networking and operating systems. ds&a is good and a prerequisite for interviewing at most companies. it would help to do this in parallel with some form of employment, as working will teach you practical software engineering skills that you'll never get from reading books. but you'll be more time-constrained, so you'll have to have really good time-management skills. also, being around good engineers is a form of education. good co-workers can help expose gaps in your knowledge and skills, which you should strive to amend. |
|
Learning basic computer organization (through nand2tetris - highly recommend this project!), while cultivating your intuition for what's possible in the world of data processing/manipulation (by learning algorithms and data structures, and the formal language of how to reason about complexity in this domain) will give you a huge advantage over the school of people who refuse to ever delve into the "implementation details" and just abstract everything away.
Learning the fundamentals of operating systems, networking, and database theory, IMO, also pays off immensely. I can't tell you how many thousands of engineering hours I've seen wasted because of engineers I've worked with who haven't taken the time to learn these primitives making horrible decisions in either "using the wrong tool for the job" or not even having the knowledge to reason about the feasibility of a proposed solution... and this is at a "big 4" company.
It's a lot harder to buy into "hype", or be sold on bullshit in this industry when you're able to decompose a system into its most fundamental elements and have the tools to reason about them.