DEV Community

Cover image for What should I know to be a software architect?
stereobooster
stereobooster

Posted on

What should I know to be a software architect?

From time to time I read articles or tweets or watch talks from @hillelogram or @pressron or @sebmarkbage (in no particular order) and realize that those people have much deeper understanding. They are not stuck in one paradigm or one programming language, they can bring paradigms from different languages to current languages.

For example, @hillelogram talks about inheritance at the whole new level I used inheritance for many years, yet never thought about it from this angle, never questioned it. Or for example, @sebmarkbage brought the idea of algebraic effects to JavaScript, yes in limited form, yes only for React, yet this idea started to spread across different frameworks, and it is quite intuitive and powerful. Or for example, how @pressron explains that imperative paradigm has its pros (people typically prise functional paradigm and not often otherwise).

Even more, they not just understand it, but also able to make it accessible for others. They are able to explain it - which proves again dipper understanding.

Dr. Hoenikker used to say that any scientist who couldn't explain to an
eight-year-old what he was doing was a charlatan

from Kurt Vonnegut's novel Cat's Cradle

I guess they have been exposed to many different programming paradigms, or maybe they studied some arcane, but very clever programming languages or they had pretty good CS education (not all degrees are the same).

Recently I stumbled on this quote:

If you don't know how compilers work, then you don't know how computers work.

-- Steve Yegge

And this made me think: are there specific topics in CS which will significantly improve understanding of CS in general? Should I write my own Lisp, or should I learn E programming language, or should I learn about branch prediction, should I read Types and Programming Languages or SICP, should I know answers to Entscheidungsproblem?

What are the most effective ways to gain real deep understanding? What is the required knowledge?

Photo by Samuel Zeller on Unsplash

Latest comments (33)

Collapse
 
byrro profile image
Renato Byrro • Edited

What I'm doing are two things:

  • Reading good books. Clean Architecture & The Pragmatic Programmer, for instance.📚
  • Starting now to "study" open source code and learn good architectural practices from them. Some of the most brilliant minds are coding in public there. 💡
  • Remembering that what makes me a better software developer is by writing better code today in comparison to what I wrote yesterday. In order to be good, I don't have to be THE best. This way I keep my ego out of my learning path. :simple_smile:

Useful discussion you started, by the way, thanks. 😉

Collapse
 
stereobooster profile image
stereobooster

I recently found this pearl matt.might.net/articles/what-cs-ma...

Collapse
 
dandyvica profile image
Dandy Vica

Hi,

It depends on where you want to head to. Pure software architect or enterprise architect ?

Being myself an IT senior architect, I can tell that some concepts or insights can only be acquired by experience.

My advice is to not focus only on computer languages. During my MD's degree in computer science, I learned how to build a compiler, to code in Pascal or Lisp, but also Topology and Numerical Analysis. Those fields I didn't use a lot during my career.

Then at work, I studied CPU architectures, C language, IBM mainframes, Oracle & Sybase DBMSs, Linux, networks, Windows but also SOA architecture, enterprise bus, software engineering etc. Being a good architect means a lot of IT techniques to master, a vision to acquire, and fields to comprehend.

So explore and read, experiment, learn.

Hope this helps ;-)

Collapse
 
yaser profile image
Yaser Al-Najjar • Edited

Software architect is a job title, meaning if you want to become one: start acting like one!

Someone already mentioned knowing the requirements and doing business related conversations but that's part of the software architect role.

There are many other important stuff as well:

  1. An end-to-end knowledge about building/testing/deploying systems.

  2. Given point #1, you will be the focal point in your team, so you will help the others with anything that comes up.
    By anything, I do mean it literally; it could be designing the database, or could be fixing a deployment pipeline, or even showing a frontend dev how to fix a UI bug.

  3. Knowing various programming languages, programming paradigms, design patterns, software design approaches (ddd, tdd, bdd... all kind of D's), and a handful of architectural styles and patterns.

  4. Practical knowledge of distributed systems and its related parts, like: networking, service oriented architecture, and caching.

  5. Willing to learn all the above on a daily basis!

I believe CS courses won't really help as much as learning from exceptional devs, some names that come up to my mind: Martin Fowler, Uncle Bob, Greg Young, and Udi Dahan.

Collapse
 
josephthecoder profile image
Joseph Stevens

I think if you only one Programming paradigm, that's a great place to start. I've never met a good architect who only knew one.

Collapse
 
stereobooster profile image
stereobooster

You mean to learn all of them? Something like this info.ucl.ac.be/~pvr/VanRoyChapter.pdf?

Collapse
 
ltvan profile image
Van Ly

First, read books, blog, articles. Depends on your field, find some reviews to know which book you should read. Code Complete is definitely one you have to read first.

Knowledge without practice is the dead knowledge. Just practice everyday, apply your knowledge in your work, your hobby project,...

Practice without observing is like driving a car without knowing where to go. Observe your result, people’s results, learn from them.

Doing all those things alone is like a silo. Everyone has his/her own point of view. People talk differently about the same subject. Talking, discussing with open mindset help you to see things different ways and understand the nature of things. Do not object other views too soon, which will make you a big silo.

Collapse
 
martinhaeusler profile image
Martin Häusler • Edited

I once heard a quote about being a software architect (sadly I can't recall by whom):

True software architects are developers, and not just any developers, they are the best of the best. You can't become a good architect without being an outstanding developer first. You need to be present at the team, you need to be open, supportive, willing to teach others and never stop improving. That's what being a good software architect is all about.

I could not agree more.

Collapse
 
stereobooster profile image
stereobooster

Yeah, the question as well could be "how to become outstanding developer", it was about knowledge and deep understanding. I wasn't able to find better title at the moment of writing.

Collapse
 
martinhaeusler profile image
Martin Häusler

No worries. My point was only that nobody should start their career as a Software Architect. You start as developer and collect lots of experience first. How to become a good developer... have a project (reading alone will get you nowhere without practice), read all the books you can get your hands on, listen to talks on Youtube, visit conferences and meetups, share your knowledge, have a blog, and bring tons of patience.

Collapse
 
xngwng profile image
Xing Wang • Edited

At MIT, (the school I went to), there is a class called 6.033 Computer Systems Engineering.

ocw.mit.edu/courses/electrical-eng...

It is basically a sophmore level introduction class for knowledge/skills for software architect.

  • Software Design principals in general.
  • Distributed Systems
  • Security (how to design secure systems, and tool kits available.).
  • Networks
  • Databases.
Collapse
 
stereobooster profile image
stereobooster

Wow! OS, Networking, DIstributed systems, Security. This indeed looks quite insightful. Thanks

Collapse
 
xngwng profile image
Xing Wang

Yep. If you want to have a structured course, this is one the best, there is no text book, but I believe course materials (lecture notes, recommended readings, homework and assignments) are all online.
After this class, there is classes that goes into each topic in more depth, but this is course that tells you how things fit together. Given it has a lot of topics already, so it can't cover everything. I would recommend understand database also, how database works, and differences between some key databases designs such as sql vs nosql.

Collapse
 
baskarmib profile image
Baskarrao Dandlamudi

If you see this diagram from TOGAF - pubs.opengroup.org/architecture/to...

These are the steps required to be performed while setting up Enterprise Architecture (EA). So there comes the first architect - Enterprise Architect.

An EA might not be able to perform all the steps. He takes help of Business Architect- They mostly have complete understanding of the business domain and the how the business functions.

Information Systems Architect - The level which helps in Blue printing your applications. They have two flavors here - Data Architect and Application Architect.

Technical Architect - This is where it comes to actual implementation level, where the person in an expert in the technology.

Solutions Architect - This is where, architect focuses on developing solutions using their tools and software for client problems. This is not under TOGAF.

Change Management Architect - This is where an Architect uses his Change Management skills. More details you can find here - iasaglobal.org/itabok/capability-d...

So apart from coding or knowledge in specific software an Enterprise Architect is required to have skills in all these areas.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.