Settings

Theme

Ask HN: Resources/discussions about program architecture

3 points by jeddy3 3 years ago · 8 comments · 2 min read

Reader

This might have been asked many times before, in that case apologies, I'm possibly searching wrong.

First of: I am a software developer since many years, in a small company, without very complex applications, sadly no mentors or alike (more developers but we are all in the same situation).

So, every time I'm trying to develop a non-simple application I'm finding I have no idea on how to make a thoughtful (or even working) architecture for it. I have several hobby projects stalled because I just don't manage to progress without making an unworkable mess.

I realize the question is somewhat open-ended, but what I am looking for might be something like walk-throughs/discussions in REAL semi-complex applications. Something that approches actually designing an application together with a mentor. Everything goes: books, talks, youtube-channels, podcasts, ...

For example, in a complex text-editor:

  - how to read and pass input
  - store and update buffers
  - where should syntax highlighting happen and where should it be rendered, how is colors passed to renderer.   
  - How do one design a plugin architecture
  - How would one design for multiple GUIs
I know how to do the small stuff like actually reading input.

I am not looking for the usual design-patterns, refactoring pieces, language tutorials, etc.

What I have tried:

  - Actually coding, but as I said, I just can't progress on my own.
  - Kilo/Hecto editor tutorials, and other projects, I'm unable continue beyond finishing them.
  - Reading code, I can't even reason about my own code, let alone others. 
  - Books, the usual recommended ones, refactoring, design patterns, pragmatic programmer, Domain driven design (can't finish that one), etc...
Books that have helped me: Modern software engineering, A philosophy of software design.

The latter book talks about mentoring lead discussion groups about application coding, that is something I would probably be very much helped by.

Sorry for the long rant, hopefully one of you fine people will have some input.

sargstuff 3 years ago

Company culture tends to drive the program architecture (appropriate or not).

Small developer discussion outside of company time (not related to company stuff) might help with team building and understanding the strengths/weakeness of those working with.

'Mastering EMACs'[1] would seem to cover the example complex text-editor.

Looking at & understanding open source projects may help both code & using other resources to understand the 'meta-data'/setup of a given project. aka cmake, git, X11 resource, unix OS, shell programming, etc

Quite a few open source programs/projects also have forums where questions can be asked/answer reguarding why/how things were done in a project. Also typically have additional resources/pointers to things program/project makes use of.

----

[1] : https://www.emacswiki.org/emacs/BooksAboutEmacs

  • jeddy3OP 3 years ago

    I haven't read mastering emacs, but reading about it gives me impression that it is more for using emacs?

    Emacs is very much on the radar otherwise, and I have actually skimmed documentation for information about its architecture.

    • sargstuff 3 years ago

      Note how things are grouped / structured in emacs. (beyond the tree, aka implied surrounding environment, current abstraction level, abstraction level(s) below current abstraction level.

      lisp (.) notation works for nice compact level notation aka outside (.) is parent environment, inside (.) is various levels of () abstraction, evaluating pair of () gives result of the () application evaluated. Where something like the bash shell, the (.) is what happens in the shell file, outside of the (.) is the command line environment, and inside () may be multiple nested shell file abstraction/other shell file references. Note: can extend the (.) concept to spreadsheets, where each cell in spread sheet is shell file & spreadsheet is "file directory".

      Could check out how treesitter is used in vim/neovim vs. emacs. and/or 70's tex & nroff put together things.

      ed fairly barebones editor, one step up from command line sed.

      Slightly more modern approach, search engine term 'text editor written in ' adding language of choice/familiar with after 'in' aka 'text editor writtin in bash'. play around with source code.

      • sargstuff 3 years ago

        What's the ide & code repository (with reports/code/"goals"/dev communication) being used? aka developer environment should take care of lot of non-code/code details that are needed for development, but not what the current developement focus is. aka focus using X11 for front end to database (vs. developing X11 gui library to use as front end).

        lisp short notation, where in the (.) is the focus?

        outside (.), result of some (.) nested in several (.) levels, or result of top (), or totally different top level ()?

    • sargstuff 3 years ago

      Yes, looking for link about history of emacs. As memory serves, EMACs was written using the common 80's approach (from scratch, in non-device independent ways because predates c 89 standard & modular libraries didn't exist). Currently, this is causing lots of headaches when trying to use/add/move things over to modern gui / standard modularized to avoid/minimize device dependence / leverage other projects useful to expand emacs)

      Smaller project note: make was written as one shot thing with intend of about 5 people using it, hence decision to go with 'tab' and not space(s) at start of line.

sargstuff 3 years ago

principlkes of chaos engineering : https://news.ycombinator.com/item?id=16244586

unix as an ide : https://news.ycombinator.com/item?id=30169843

using ed : https://news.ycombinator.com/item?id=34162312

editor articles : https://blog.sanctum.geek.nz/links/

pioritizing technical debt : https://www.youtube.com/watch?v=fl4aZ2KXBsQ

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection