Code Monkey home page Code Monkey logo

rollercoaster's Introduction

A Programming Rollercoaster

Introduction to software engineering. Written by a student, with students in mind.

I was having an outstanding meal that day: some beef steak with greenish Tabasco sauce and some sort of a pepsi drink. I generally enjoy spicy meals, but that particular one was a little bit tough. Usually, you might want to extinguish all the hell going on in your mouth with some cold pepsi. Well, that's a tricky one: once you drink too much of it, it burns much harder. Unfortunately, this story doesn't make any sense in the context of the book at all. I was thinking about my background project, which, at that time, I'd already been developing for a couple of weeks. At that moment of time I realized that idea behind ain't that good, at least ain't as good as I had thought at first.

Computer programming, or you may say, software engineering, is all about learning. Take a glance at other industries; for instance, in sewing, tailors are using the same good old techniques, which has been around here for centuries already. World of software engineering is whole different. Computers do keep on getting faster and faster, new technologies get born like everyday. Since you don't typically want to miss a new trend, you are expected to learn forever. Period. I am particularly interested in the first iteration of this endless loop.

There are two major kind of books: these aimed on teaching pure coding in some programming language and these covering theoretical knowledge. The first kind, in my humble opinion, is absolutely useless, since they don't teach programming, but monkey coding, which is rubbish. The second type of "programming" books usually covers a narrow range of academic knowledge, so it obviously doesn't make any sense for newcomers.

What I'm trying to do here is to build a unique resource: a book, supposed to teach you neither coding, nor algorithms, but the general thinking approach, which I personally find an absolute necessity in software engineering. I call it an idiomatic approach to software engineering.

Creative Commons License

rollercoaster's People

Contributors

tucnak avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

rollercoaster's Issues

Write chapter "Fundamental entities"

By the end of reading the chapter, reader should have a solid understanding of basic Go syntax and be able to read-n-understand trivial sources written in Go. It should not also be locked on Go only, I should be generic as much as possible.

Build a solid plan

Currently, the book doesn't have a solid contents plan, but some occasional pages aligned in some weird way. The plan draft on Google Docs must get expanded in order to cover all the data that we are gonna eventually publish.

Generally, book must be separated into 3-4 logical sections, such as Think!, Steady! or Hack!.

Write chapter "Paradigmatic context"

Beginners usually focus on programming languages a lot and miss the whole point of paradigms and software engineering approach. I should carefully describe everything from ASM to FP and outline all the major pros/cons and general differences.

I should also somehow address code quality and overengineering issues. Easy to read and commented code listings might be good as well.

Engineering workflow

General engineering approach described in Think! now is bloody rubbish. This issue is all about redesigning it. Here is the main schema:

  1. Problem (create/fix what? for whom?)
  2. Research (existing solutions, libraries, related discussions?
  3. Analysis (categorizing all the data mined during research)
  4. Implementation (looking for the most efficient ways of actual coding)

Some key points I might want to play with:

  • You should never work on ambiguous, hazy, imprecise problems or problems from subject area you are not familiar with;
  • While doing a research, try to mine as much data as possible, focus on existing solutions and alternatives and their pros/cons first;
  • While analysing research data, carefully estimate your central values and build corresponding priorities, focus on these, so you could outline data that actually matters;
  • Before doing actual coding, make sure you've got a schedule (implementation stages — PoC, MVP, Alpha, Beta, etc) and some sort of a plan that you'd stick to during the whole development cycle.

Write chapter "OOP"

OOP is such a buzzword, all the newcomers know some shit about it. Crucial task here is to get all the rubbish out of the reader's head and build a solid understanding the aims/values/priorities of OOP.

Refactor "Steady!"

This issue should be closed only when all the chapters from Steady! are consistent. I should not start this inb4 all the chapters are ready. The whole goal of this issue is to fix most misprints, articles, stylistic mistakes, add some links to resources, maybe jokes.

Links for resources in Start and Think

Both Start! and Think! sections introduced a bunch of terms that reader mightn't know, links for comprehensive resources missing. Wikipedia would be fine, though.

Write chapter "Briefly about"

This chapter should provide essential knowledge to basic terms, such as Software, Hardware, Language, Compiler, etc. It's really important to draw a coherent picture for a reader. A short list of things I should focus on:

  • History of CS and computer architectureww
  • BIOS
  • Memory, memory management
  • Different operation systems
  • "Programming Language is how compiler understands algorithms and translates them into assembly"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.