Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Just a bunch of notes #16

Closed
togakangaroo opened this issue Mar 17, 2017 · 2 comments
Closed

Just a bunch of notes #16

togakangaroo opened this issue Mar 17, 2017 · 2 comments

Comments

@togakangaroo
Copy link

togakangaroo commented Mar 17, 2017

Hi all, someone sent me this repo requesting comments and I wrote up a long response I thought might be useful to you. It also might not be. Yall are doing your own thing and trying to formulate a plan and that's good, I'd just like to submit this and maybe it will be helpful.

Please excuse the ranting tone. It's early in the morning and I've been reading too much political news.


First, I think using the term “map” is problematic since it implies that you can get to or achieve the waypoints. All of these things are more “directions” than destinations.

Next, I don’t like the idea of splitting up “backend” and “frontend”.

I think the standard definitions that people use for this stuff are hugely problematic. If you define HTML/CSS/JS as “front end” where does that leave someone who works on the iOS app for let’s say “simple.com”? Are they not a “web developer” even though they are building something that is equivalent to the website? What about someone who is working in a python templating language that spits out html/css? Where do they fall? I can keep coming up with examples.

Further, I think that exclusively focusing on one over another can be harmful. In terms of job prospects, you’re going to have a lot more problems getting a job at a smaller company if you can’t work the full stack.

Worse, it is harmful for learning. A humongous part of programing on the web is really internalizing how the web/HTTP/etc works. This is the “in between” stuff that you’re only going to learn by studying the whole process simultaneously.

Personally I prefer to talk about things functionally than as tech. “Back-end developer” to indicate how good someone is at understanding system architecture, performance, databases, and security; and “front-end developer” to indicate to what degree someone thinks about human-computer interaction, responsiveness, UI optimization and reusability, browsers, responsiveness, and accessibility. When you formulate definitions this way you start seeing these as two largely orthogonal dimensions of a square, rather than anything mutually exclusive.

Now about specifics. I’ll just work my way down the chart with random comments.

  • Splitting HTML learning from CSS is weird. I’d say learn them at the same time - there’s basically nothing to HTML oherwise (except forms)
  • Javascript is es6, stop drawing a distinction and just read an essay on its history
  • Task runners? Gulp? Why?
  • Don’t bother with Flux
  • React Angular and vue? How many rabbit holes do you want to simultaneously go down? You don’t know angular because you ran through the tutorial. It’s a huge subject
  • Don’t bother with Yarn until you need it
  • Testing should be its own thing. Specifically TDD. If you learn the tool you won’t do testing and you definitely will not do it to its full potential. You need to learn the philosophy.
  • Typescript - whatever, sure, do or do not
  • How is “Responsive Web” different from just CSS?
  • CSS Framework? Don’t waste your time learning bootstrap. Just learn modern CSS - get comfortable with flexbox, understand the underlying concepts and you’ll be fine. There aren’t all that many that you can’t learn them in a week.
  • Preprocessors? Fine, but I feel like LESS is well…less overhead while learning
  • Deep dive CSS3..first of, CSS3 has been out forever, it’s just CSS now. Being aware of the fancy stuff is fine and you can look it up as needed. If you just learn the basics you’ll be able to guess pretty well what features CSS has or doesn’t
  • SVG is cool, d3 isn’t necessary and isn’t really tied to SVG at all, they’re just often used together but either is often used separately.
  • SVG is something you can spend 2 days on, get the basics, and come back to as needed
  • Javascript design patterns. Huh? How do you write your code without designing it? You have to think of that stuff from the outset. Also the Javascript Design Patterns book is bad and I dono’t like it
  • Regex is a core programming concept in general, not just JS. Spend a day on it, learn the type of thing that it does, then learn more as needed

Backend:

  • Just looking at this you can feel the cognitive weirdness as it tries to recommend all the backend platforms at once. This is due to this arbitrary “backend/frontend” breakdown, if the terms are to have any meaning they should be defined functionally as the type of thing you do and focus on, not tech.
  • Minimizing Java and C# is weird since those are the ones with the greatest demand (at least that I’ve seen)
  • How is “Web Server” a separate topic? What does that even mean?
  • What does “Restful APIS” mean?
  • SOLID, YAGNI, KISS are not something to just read up on at some point. YAGNI and KISS are vague guidance that you can just take as a mantra and repeat to yourself every hour. SOLID is an important thing to study that makes sense only after you’ve gotten comfortable with coding and are looking to reach the next level. Its not something that you want to “just pick up at some point”
  • Regular Expressions again! See my previous comments
  • Security/Authentication…I guess this really depends on what exactly you mean by learning it. If you learn how the web works (which a lot of people don’t) you will be learning a lot on this front already
  • Storage - pick one RDBMS and just go with it. There’s plenty to learn there without jumping all over the place. Don’t pick Oracle...or probably MySql.
  • Why the shit does everyone want to focus on MongoDb? Its an oorobooros which is only notable for the fact that it is used which it is only because it is notable.
  • GOF Design Patterns - you’ll want to get to that sometime sooner but also it depends on the language you’re using. They were written for Java and not all apply
  • Architectural patterns…like what exactly? Learn how?
  • “Give DDD a shot” flat out offends me. If that is your attitude you will fail. Let’s say you’re making a calendar app and want to “give DDD a shot” what does that even mean you do?
  • Also, for the love of all that is holy, if you are doing DDD and reading the big DDD book - there are 2 important concepts; ubiquitous language and bounded contexts. For reasons that Eric Evans has since lamented he put the latter on chapter 17 which nobody ever gets to. Read those chapters.
  • Also on DDD. Don’t just think that using Repository pattern means you do DDD. In fact, with modern ORMs, you probably shouldn’t use that pattern.
  • Learn different testing techniques. Yes but waaaay before this point
@kamranahmedse
Copy link
Owner

kamranahmedse commented Mar 17, 2017

Thank you for your comments, I got a little idea of what you are trying to say but unfortunately most of the stuff you said doesn't make much of a sense to me. Given my experience and after discussing with different many people plus the feedback from hundreds of different people on social networks, I still think it is perfectly fine and gives a better idea of the whole ecosystem.

Plus going through your "rant" at different points I think you did not look at the legends, it does not even remotely suggest to learn and use everything in the chart,

However I am open to ideas. Could you possibly make a PR with what you think it should be?

@togakangaroo
Copy link
Author

togakangaroo commented Mar 17, 2017

I did look at the legends, and I wasn't thinking that you were proposing learning everything, I'm happy to elaborate more on any point you have a question on.

As for a PR...I think s problem is that I disagree with the core "front-end"/"back-end" split for the reasons outlined so It would have to start at the very beginning.

But thanks for considering my thoughts either way.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants