Learning resources for curious software engineers
github.comThe inclusion of the perspective section: https://github.com/charlax/professional-programming?tab=read... I think is really smart. Same for personal productivity. Two things that can dramatically change how and what you end up studying and doing with your time / life.
I did a coding bootcamp and yeah the frontend knowledge they taught was useful, but I could have learned that online for free. I used to consume big githubs like this by by the bucketful, but none of them really focused on these soft skills. Looking back, the far more valuable thing I learned was these exact soft skills, that unlocked a level of discipline I'd never had, without which I'd never been able to have a career change, or a successful career after.
The shared article in the github is incredible: https://www.theguardian.com/commentisfree/2020/sep/07/termin...
I often wonder why I don't see more of these sorts of articles. From watching a family member slowly die of cancer, and from reading books like "When Breath Becomes Air," I'm guessing it's some combination of exhaustion, disability, and a new set of priorities that doesn't really involve death blogging. Still, I find these kinds of writings more poignant than most things I read.
I'd be interested to know what "successful" means to you in this context?
Being faced with the limited time we have on earth, I have had a hard time deciding whether it'd be better to spend time on building a career that makes a lot of money, or to enjoy the richness of life right from the start. (Or any of a zillion other ways to live a life, for that matter.)
I recommend reading "When Breath Becomes Air," my understanding of the author's perspective is that when faced with imminent death, one should do what one considers to be important.
The sneaky thing is, you are going to die, so the above statement should ALWAYS be how you're living your life.
If your work isn't important enough to you to be doing if you know you'll probably be dead in 1-3 years, you probably shouldn't be doing it now.
For me, my work is important to me and my values (I run a software co-op), and also enables me to live out my values in ways I'd like to do in the future (kicking off a global village construction kit project - for which I need money, lol).
Engineering certainly makes me a lot of money compared to when I was a teacher, but also it allows me to help build technology to liberate people, which is very important to me. In that way, I believe I'm successful, because I get to build things that make me better at building technology that liberates.
If I were to find out I would die in the next few years, I believe only thing I would change is shorten my long term plans by working my own contracts less, sell my stocks, and travel more, if I was healthy enough to. I believe I'd still run my co-op.
Any thoughts for a Philosophy section? i.e. meta-CS. I'm thinking about stuff like this, though I guess it would better as blog posts or second-hand critiques:
- Chomsky 1956, _Three models for the description of language_ https://chomsky.info/wp-content/uploads/195609-.pdf
- Naur 1985, _Programming as theory building_ https://pages.cs.wisc.edu/~remzi/Naur.pdf
- Simon & Newell 1970, _Human Problem Solving_ https://iiif.library.cmu.edu/file/Newell_box00018_fld01306_d...
etc. Maybe too broad a topic? Basically this list feels like it's lacking answers to some fundamental "why is it like this" questions, if that makes sense.
Does the language part really cover just JS and Python separately? Also, it looks to me like lots of developer-oriented stuff, whereas I have a picture of software engineering as the more hardcore side consisting of robust systems, scale, fault tolerance, reliability etc. Essentially, a step up in terms of the organization’s ability to put direct responsibility on a ”credentialed professional”, akin to an architect or a civil engineer constructing bridges and buildings.
That's the case in certain places (in Canada, for instance, calling yourself an "engineer" of any sort is strictly regulated); but in the US - which, for better or worse, dominates tech - "software engineer" has come to be a catch-all term for all developers, whether they're building out exhaustively designed and tested aerospace code or throwing together a CRUD app in Rails.
Personally I have never found any consistent, widespread differences in the meaning of the words "software engineer", "developer", and "programmer", or even "coder". It's people who make software, with differences in job titles depending on company and fashion.
Is there an article that teaches how to approach coding with future expansions in mind? It's understood that predicting all future features is impossible. Writing code for the product's current state often results in extensive refactoring when new functionalities are introduced.
In my experience, writing code that tries to be extensible also results in extensive refactoring when new functionality is introduced.
My advice would be to make the code easy to understand and relatively un-entangled. Those make the inevitable refactorings easier.
I would say don’t try to make code extensible - try to make code replaceable.
If it is not complex it is easy to rewrite and replace. Some things need to be complex but trying to make things extensible is making it needlessly complex quite often.
Isn't that what almost the whole field of software engineering is about?
In my experience, key is to keep the code as small and simple as possible, that way there is less that might need changing in the future.
I think there is no single one because it would be different for different types of software.
No silver bullet I would say.
As someone who wants to learn and explore more areas of computer science and programming, this outline and centralized list of resources is incredibly helpful! Thanks so much.
Cool but they should get rid of the medium links. I'm not that curious.