Notes for Newbie Developers
Firstly understand The definition of a Software Developer.
Work
Software development process
- before development
- design
- should you use the pre-built frameworks or build from scratch?
- think about the potential future cases
- when you are limited by the framework itself, then it might be time to start from scratch
- if the framework is too complex, might be a good idea to start from scratch
- consider the component diagram
- how to separate the concers/responsibility?
- how to make it modular?
- should you use the pre-built frameworks or build from scratch?
- detail the workflow
- detail the main flow
- prioritise which are main features, which are common cases, which are edge cases
- design
- code
- utilisation of git
- utilisation of code formatters, linters
- utilisation of pre-commit hooks
- after code
- testing
- unit testing, functional testing, coverage testing
- CI/CD
- testing
- finally PR, deployment
On presentation
- talk about impact
- you created a web ui, but what's the real value?
- Address the pain points
- compare before and after scenarios
- writing docs for users
- make sure to put across the point what exactly the user need to do
- get a TL;DR
- demo
- showcase the flow and use case
- current features, pending features
- limitations
System/project design
- think about the whole flow
- define inputs and outputs to your system
- what are the things that you can add in, in addition to the things you're tasked.
- work out the whole flow first, even if the result is not that great. You can swap in/out components later, important thing is the whole flow.
- what are the tradeoffs
Client user interaction
- you have to drill down to what client/user really wants (aka, the intent) to avoid XY problem
- not everything user wants has to be in your project
- you have the right to suggest the solution from your perspective, sometimes it will totally eliminate the requirement
Build a Programmer Profile for yourself
- Stackoverflow
- GitHub
- personal blog
News reader such as inoreader, hacker news to keep up with the news
- important
- keep abreast
- know what is feasible
Learn Problem Solving
- Hardware and Software fundamentals
- Back to Basics
- Choose Boring Technology
- The importance of Note taking for software development.
- Most Software Bugs Are Not From Lack of Knowledge
- Modern storage is plenty fast. It is the APIs that are bad.
- Improve your debugging by asking broad questions
- Debugging Methodology
- If It Doesn’t Suck, It’s Not Worth Doing
- Divide and conquer
Learn why you shouldn't care too much about "what-ifs": The mindless tyranny of what if it changes as a software design principle
Learn about The Security Mindset, how it can help you write secure software or develop new career paths.
Contribute to opensource
Make sure your solution works end to end, before optimising stuff.
URLs:
- Philosophy
- Back to Basics – Joel on Software
- Lucas Kostka - Foundational knowledge is worth a hundred tools
- The Duct Tape Programmer – Joel on Software
- Buckblog: Don't Assume It's Difficult until It Is
- The Best Code is No Code At All
- Favouring Tools is Bad Engineering
- Beginner's Mindset: Key to Engineering Expertise - JabPerf Corp
- We have used too many levels of abstractions and now the future looks bleak
- On selection of technology
- Debugging
- Problem solving
- Performance optimisation
Resources
- The Missing Semester of Your CS Education
- Programming Paradigms (Stanford) - YouTube
- Spaced Repetition
- Building a Second Brain The Illustrated Notes
- Hacking
- networking
- Explore | 0DE5
Career
Greater impact leads to greater responsibility (bigger title)
How to Become a 10x Dev: An Essential Guide | HackerNoon