Good Enough is better than Perfect. Software Engineering is a practice of finding the right balance of tradeoffs. With every piece of code shipped, I attempt:
[ understand requirements → prototype → make it work → make it better → ship → iterate ]
Teamwork and Communication. I've worked in the non-profit space for many years and have interacted with all types of people and personalities to solve my constituents problems. To do this job well, you have to be an active listener and gain a deep understanding of user needs and issues, otherwise you won't be able to solve their problems! As in software engineering, this required adaptability to changing circumstances, learning from others, open and clear communication, as well as a collaborative mindset.
Never Stop Learning, Practicing and Growing. I'm a self taught developer. I wake up everyday thinking about what I can learn that will enrich my employer's business, my personal skillset and my inner life. I am adaptable, intellectually curious and always engaged in honing my craft. I find great satisfaction in both mentoring and being mentored, but if those opportunities aren't available, I can seek out the right resources and teach myself.
I am currently programming in JavaScript/TS, Python, Java, Go, C, Rust and Racket. I write in Ruby too!
For more exploratory projects, I've been familiarizing myself with Clojure, OCaml, Eiffel, Verilog.
For frontends, I utilizing the React Ecosystem, as well as vue and astro. I am looking forward to platform agnostic webcomponents.
For backends, I usually sketch things out in Node/Express, Django or Spring Boot.
For SQL databases, I utilize PostgresSQL, but will use sqlite for smaller toy projects.
For NOSQL databases, I utilize MongoDB.
Composition. Writing software to me is about logic, abstraction, sequence, decision making and ultimately creativity. Programs are built out even smaller programs, functions or procedures. Choices here can be perilous!
Abstraction. These programs are written in a language that is then interpreted or compiled into an even lower-level abstraction like Assembly. Assembly is then assembled into machine code which is interpreted by the hardware!
Logic & Sequence. Further below you have instruction decoders, arithmetic logic units and control units circuts composed of logic gates, multiplexers, flipflops, etc allowing for the sequencing of operations, transfer of data/signals between components.
Wonder. This sequencing is given measure by an electrical current being applied to a crystal, which gives us a stable signal which gives everything in the ladder above order.
Creativity. Ever consider:
Climbing. Planning your beta on a problem scratches a lot of the same itches as programming. It requires percision, iterative problem solving, corrective measures and a healthy appetite for failure. Who knew exercise could be so fun (and painful!)
Programming. A good portion of my time goes into understanding where software engineering has been and where it is going. I like reading & reading about:
Learning. We learn by doing and studying ourself doing.
Walking. There is nothing that will empty the mind like a directionless walk to nowhere.
Friends.