I did 11 of the 12 chapters of this. Each chapter is has a practical exercise. You do need some programming experience. Really teaches you how a computer works buy building on in a high level description language (processor, memory etc all from nand gates). Then you build an assembler for it. Then a compiler.
First edition on amazon: https://www.amazon.com/Elements-Computing-Systems-Building-P...
Second edition pre-order on amazon: https://www.amazon.com/Elements-Computing-Systems-second-Pri...
In general, I do also echo some of the other comments. If you are helping to design the app, you shouldn't necessarily need to understand the implementation details. In my experience, clients, whether they be external or internal or colleagues, getting too involved into what they think the implementation should be is usually a disaster. It puts pressure on the system to conform to how they think it should be, which is usually not necessarily how it should be, and it basically adds unnecessary constraints. The real constraints should be what the software should do and specifications on that, including how the software is intended to be maintained and extended.
Some thoughts on some specific courses and books that I think would be helpful to better understand the goals of software development and design and ways to think about it all:
Programming for Everyone - An Introduction to Visual Programming Languages: https://www.edx.org/course/programming-for-everyone-an-intro...
I think this course should be taken by managers, designers, and even software engineers. The primary result is that you'll come out of it knowing state charts, which are an extension to state machines, and this will be very useful for thinking about software and organizing what the software should do. Handling state is one of the primary problems in software, and you might notice that all of the various paradigms (OOP, functional, imperative, actors, etc.) in computer programming relate to the various ways people think about handling state in a computing system.
How to Code: Simple Data and Complex Data:
https://www.edx.org/course/how-to-code-simple-data
https://www.edx.org/course/how-to-code-complex-data
https://www.edx.org/micromasters/ubcx-software-development
These courses are taught by a designer of the Common Lisp language and based upon the excellent book How to Design Programs. It is essentially a language agnostic course that uses Racket to build up design paradigms that teaches you how to sort out your domain problem and designs into data and functions that operate on that data. The courses are part of a MicroMasters program, so if you really want to get into Java, that is taught in the follow-on courses.
Based upon your last comment, here are some book suggestions on how computers work:
Code: The Hidden Language of Computer Hardware and Software: https://www.amazon.com/Code-Language-Computer-Hardware-Softw...
The Pattern On The Stone: The Simple Ideas That Make Computers Work: https://www.amazon.com/Pattern-Stone-Computers-Science-Maste...
But How Do It Know? - The Basic Principles of Computers for Everyone: https://www.amazon.com/But-How-Know-Principles-Computers/dp/...
The Elements of Computing Systems: Building a Modern Computer from First Principles: https://www.amazon.com/Elements-Computing-Systems-Building-P...
Something like https://www.amazon.com/Elements-Computing-Systems-Building-P... is not hard, but it's arguably a toy system.
IMO Project Oberon starts from the same principles and builds up to a productive enironment including text processing, a compiler, very basic hypertext, basic networking and hardware to run it on.
Elements of Computing Systems
Writing and Interpreter in Go
https://www.amazon.com/Elements-Computing-Systems-Building-P...
https://www.amazon.com/s?k=writing+an+interpreter+in+go&i=st...
The Elements of Computing Systems: Building a Modern Computer from First Principles
https://www.amazon.com/Elements-Computing-Systems-Building-P...
Follow that up with Computer Systems A programmers perspective.[2]
My review of ECS [3]
[1] https://www.amazon.com/Elements-Computing-Systems-Building-P...
[2] https://www.amazon.com/Computer-Systems-Programmers-Perspect...
[3] https://www.amazon.com/gp/customer-reviews/RZ4ME4QH22JML/ref...
Creating your own programming language is more a side effect, but that is the book that taught me about computers and compilers.
[0] https://www.amazon.com/Elements-Computing-Systems-Building-P...
[2] https://www.coursera.org/learn/build-a-computer
[3] https://www.ted.com/talks/shimon_schocken_the_self_organizin...
https://www.amazon.com/Elements-Computing-Systems-Building-P...
http://www.nand2tetris.org/ is the website for it.
Thanks for the confirmaton, I didn't remember seeing this either.
"The book, btw, is a masterpiece ..."
Agreed. The paper back is a nice format and reasonably priced for a technical book as well:
https://www.amazon.com/Elements-Computing-Systems-Building-P...
After doing all of this, you make Tetris in the high level language. It's a badass book, super well-written, and what I consider an essential text.
[0] https://www.amazon.com/Elements-Computing-Systems-Building-P...
I wish I had this book at the beginning of my career. http://www.amazon.com/Elements-Computing-Systems-Building-Pr.... Makes you design the hardware, then the software for that hardware.
Should not take more than 8 - 12 weeks with school work/day job.
Learning the fundamentals, becoming better at these will help one see through the 'stack of tons of languages, tools, frameworks' and yet be able to handle all of these with relative ease.
I wish 'Elements of Computing systems'[1] were there when I started as a programmer.
[1] http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
From NAND to TetrisBuilding a Modern Computer From First Principles
http://www.amazon.com/The-Elements-Computing-Systems-Princip...
http://www.amazon.com/The-Elements-Computing-Systems-Princip...
edit: $30 I guess, still worth it.
1. http://www.quora.com/How-do-I-write-an-operating-system
2. http://www.quora.com/If-you-were-to-write-a-new-operating-sy...
3. http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/...
4. http://www.amazon.com/The-Design-UNIX-Operating-System/dp/01...
5. http://www.amazon.com/The-Elements-Computing-Systems-Princip...
a + b
Best go with structural if you want to actually learn something. This book ( http://www.amazon.com/The-Elements-Computing-Systems-Princip... ) is very good and I think still stands as the best introduction to this type of stuff I've seen. It's also presented in a straight forward enough way that it's good enough self-study for anyone with some programming experience.
http://www.amazon.com/The-Elements-Computing-Systems-Princip...
Compiler Construction: http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf
The Elements of Computing Systems: http://amzn.to/GQycqj
MetaCompilers: http://www.bayfronttechnologies.com/mc_tutorial.html
How to Create Your Own Freaking Awesome Programming Language: http://createyourproglang.com/
Bootstrapping a simple compiler from nothing: http://www.rano.org/bcompiler.html
Software programming starting from assembly language under linux : http://www.amazon.com/Programming-Ground-Up-Jonathan-Bartlet...
A study going from chip design to high level programming :
http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
IHMO this "problem" of "incomplete vision" started when device drivers where introduced in general purpose OS. Professionnal application developpers started to target API instead of hardware. A milestone in this trend for me is Windows 3.0 (1990). This also marks the demise of fixed hardware computers that the hobbyist favored so far.
http://www.amazon.com/Code-Language-Computer-Hardware-Softwa...
http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
http://www.amazon.com/Structure-Interpretation-Computer-Prog...
http://www.amazon.com/G%C3%B6del-Escher-Bach-Eternal-Golden/...
http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master...
Good luck!
----
[1]: http://www1.idc.ac.il/tecs/
[2]: http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
I'm a big fan of 'The Elements of Computing Systems' - takes you from NAND gates to pong.
http://www.amazon.co.uk/Elements-Computing-Systems-Building-...
http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
http://books.google.com/books?id=THie6tt-2z8C&dq=the+ele...
which will seriously take you from logic gate/chip design all the way to scripting languages and an implementation of tetris on a java-esque language/vm. Totally awesome!
You can download the simulation software which is used in the book here if you want to play w/ logic gates/HDL etc. more http://www1.idc.ac.il/tecs/
http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
This book takes you from logic gates to writing your own (extremely simple) virtual machine, programming language, etc. It's a bit fast paced and project based, but it'll run you through a very high level overview of the whole gamut.
If you want to develop knowledge in depth, this is a good place to start:
http://www.amazon.com/Elements-Computing-Systems-Building-Pr...
Buy the book, download the courseware for free, and learn how computers work from NAND gates up. Implement your own OO language on the hardware you've built and write your own OS in it. Then write games for the resulting system. This will put you ahead of most coders out there.
The most recent edition of this book is the Second Edition: https://www.amazon.com/dp/0262539802/
To quote from the Preface concerning what the difference between these two editions is:
"The Second Edition
Although Nand to Tetris was always structured around two themes, the second edition makes this structure explicit: The book is now divided into two distinct and standalone parts, Part I: Hardware and Part II: Software. Each part consists of six chapters and six projects and begins with a newly written introduction that sets the stage for the part’s chapters. Importantly, the two parts are independent of each other. Thus, the new book structure lends itself well to quarter-long as well as semester-long courses.
In addition to the two new introduction chapters, the second edition features four new appendices. Following the requests of many learners, these new appendices give focused presentations of various technical topics that, in the first edition, were scattered across the chapters. Another new appendix provides a formal proof that any Boolean function can be built from Nand operators, adding a theoretical perspective to the applied hardware construction projects. Many new sections, figures, and examples were added.
All the chapters and project materials were rewritten with an emphasis on separating abstraction from implementation—a major theme in Nand to Tetris. We took special care to add examples and sections that address the thousands of questions that were posted over the years in Nand to Tetris Q&A forums."