Jump to content

Front-end and Back-end Developers

Hi P
Go to solution Solved by vorticalbox,

If you're learning aws then learning docker is a great bonus so you can drop containers into AWS fargate.

 

Git is a must and unit/integration testing.

1 hour ago, Fredrik Svantesson said:

Also, stay the hell away from Java, there is no reason to encourage its existence anymore than we already do.

Why some people hate Java? (serious question) :o

 

For back-end I see it mentioned a lot along PHP (another hated language)

 

Link to comment
Share on other sites

Link to post
Share on other sites

50 minutes ago, Hi P said:

Why some people hate Java? (serious question) :o

 

For back-end I see it mentioned a lot along PHP (another hated language)

There must be tons of reasons for the hate toward Java here's a few i can see and heard people saying(not necessary my opinion)

 

- Not as user friendly IDE when it come to interface design as other languages

- Slow compile time

- Lots of business where JRE is banned or it's literally ban to install external tool they don't already have.

- Not same mentality of coding between desktop app or web app.

- Include are a mess

- Very little amount design pattern implemented

- Awful error messages

- Less and less people use it so help is getting thinner.

- It's a dying language

 

I pretty much agree to all but with mountain of salts.

- IDE horrible, i agree not user friendly or laggy when designing interface. Compare to the speed and simplicity of like Visual Studio (not code because that's is horrible lol).

- Slow to compile well that maybe the case for 1 in a thousand projects.

- JRE being banned this is true, this is one of the main reason my company is not developing Java that much anymore. It's being block nearly everywhere including government affiliate

- Not same mentality i agree partially but this comment is mostly from someone coming from C++ or .NET where you code the exact same way no matter the use.

- Include are a mess. Some are but rarely. If you mean the way to add them then yes If you compare to something like Delphi or any .NET which is one line or 1 menu and select the file but it's not THAT complicated, it works very similar to C++, so just more menus that's it.

- Design patterns well that's true. You have to create your own library that implements them and once you have them you can reuse.. until they change something in the version and you update. On one side if they would implement them it would most likely be more stable than you could make and they would have many case scenario that they could fix it for every case but on the other hand how often does a design pattern "as is" is perfect for your use case. Except observer pattern i can't think of a single design pattern that the default was fit for my case in 20+ years.

- awful error messages, that i have seen obscure ones but i guess from the JRE core methods it's mostly clean error code that are meaningful. I did see some awkward ones but so have .NET that i hear people praising how good the exceptions are.

- Less people use it and it's a dying language. That in my case / region is true. I am pretty sure this is different in region per region basis. While this is weird as school around here stopped teaching C++ and migrated toward Java.

 

Link to comment
Share on other sites

Link to post
Share on other sites

From my experience (working professionally as a Backend developer for a year), you should not learn Java frameworks. Actually, it all depends on what you want. Currently, the jobs for Java and C# programmers etc are mainly to maintain old code. I doubt many new projects are made with them (maybe with java since it has evolved quite nicely, but has a bad rep). The hot things right now are NodeJS (kinda biased here since I use node all the time), Rust if you want to get your hands dirty, Go if you want to be somewhere in the middle in terms of abstractions, Python if you like the language (personally I can't stand the syntax) and I think that's if for hot stuff currently, but I might be missing something. By the way, performance wise, the programming language does not really matter all that much. 99.9% of the time you will be bottlenecked by the database doing stuff and not the language. Especially with node, that is non-blocking by nature, you will probably find the performance of the DB will slow you down quite sooner than the performance of the programming language. Besides, applications are now stateless and you will probably use kubernetes in production unless you are going to work for a company-dinosaur, so scaling the service is usually as simple as just creating new instances in kubernetes with the click of a button.

 

Also you should definitely make yourself familiar with Git. It really is not all that complicated and it will save you a ton of time, even for hobby projects. Next up is learning Docker and Kubernetes. I would recommend to learn how it all works behind the scenes before you start writing dockerfiles and running images, as things will start making sense much faster that way.

 

Also as a backend developer you should start learning about authentication and JWT (Json web tokens if you want to google it better), how REST works and why it is stateless, scaling applications and the different ways of doing that etc. I know it sounds like a lot of theoretical stuff, but believe me it will come in handy sooner than you can imagine. Besides, all good apps start with a good design (or architecture if you prefer) first and then using the right tools.

 

I definitely forgot some things, but you can feel free to ask away.

 

EDIT: I would like to add some things I would avoid if I were you.

  • PHP: It is not only a bad language, but it will kinda force you down the path of making websites and using WordPress for the most part, as these are the most popular applications of it. Not that it is bad to make websites and use WordPress, but for me this is not where the interesting and fun stuff happens.
  • C/C++: No problem with these languages (they are decent, if you exclude many things C++ does insanely wrong like the lack of modules, a bloated standard library etc for which C can be forgiven since it was never designed to be that kind of language)
  • I would generally avoid any language without a solid module system, as development nowadays is very very much a team sport. You will use many things other people have written, either in your company or third party libraries. And that is a good thing, because it will not only save you time, but you can rest assured, the library someone has spent a lot of time writing after probably a lot of experience in the specific area the library is about, will always be better than any custom solution you might come up with. It is nice for learning and hobby projects, but professionally reinventing the wheel is never a good idea or encouraged.

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

2 hours ago, FakezZ said:

many things C++ does insanely wrong like the lack of modules, a bloated standard library etc for which C can be forgiven since it was never designed to be that kind of language

 

First off, C++ doesn't have a module system (and IMO shouldn't have one) for the same reasons C doesn't: It's buildsystem is too much lowlevel for it to even be feasible. A C++ module system would only become a reality through external means (i.e. corporations or community initiatives), since it requires setting a standard on how native libraries should be built, structured, and what platforms to support (and how these platforms in turn should be supported etc.). It's a very big project, and because of how lowlevel C and C++ is, it's simply nothing that can be part of the C++ standard in a sane manner.

 

Secondly, you're on point with the STL, although lately (c++14 and up imo), it has vastly improved and with c++20 becoming stable, we even have sane filesystem utilities in our STL. So I'd say the issues has become kind of deprecated (and solved!)

Link to comment
Share on other sites

Link to post
Share on other sites

38 minutes ago, Fredrik Svantesson said:

 

First off, C++ doesn't have a module system (and IMO shouldn't have one) for the same reasons C doesn't: It's buildsystem is too much lowlevel for it to even be feasible. A C++ module system would only become a reality through external means (i.e. corporations or community initiatives), since it requires setting a standard on how native libraries should be built, structured, and what platforms to support (and how these platforms in turn should be supported etc.). It's a very big project, and because of how lowlevel C and C++ is, it's simply nothing that can be part of the C++ standard in a sane manner.

 

Secondly, you're on point with the STL, although lately (c++14 and up imo), it has vastly improved and with c++20 becoming stable, we even have sane filesystem utilities in our STL. So I'd say the issues has become kind of deprecated (and solved!)

Well, actually there will be a module system in the C++20 standard (possibly, they promised it in C++17 but it never happened), so it is definitely not impossible and does not have anything to do with low level. Rust has a really nice module system, is also low level and the performance is on par with C/C++. The thing is that all the proposals for the C++ modules are imo not that great and kinda hard to use.

The problem with the standard library is that they just keep on adding stuff, sometimes "replacing" older ones without deprecating them and they never break backwards compatibility, which I can understand to an extent, but it has created many many problems. I am not saying, by any means, that C++ is a bad language, but currently there are just much better alternatives such as Rust and sometimes even Go.

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

8 hours ago, FakezZ said:

Well, actually there will be a module system in the C++20 standard (possibly, they promised it in C++17 but it never happened), so it is definitely not impossible and does not have anything to do with low level. Rust has a really nice module system, is also low level and the performance is on par with C/C++. The thing is that all the proposals for the C++ modules are imo not that great and kinda hard to use.

The problem with the standard library is that they just keep on adding stuff, sometimes "replacing" older ones without deprecating them and they never break backwards compatibility, which I can understand to an extent, but it has created many many problems. I am not saying, by any means, that C++ is a bad language, but currently there are just much better alternatives such as Rust and sometimes even Go.

 

Lol, just watch that module system be dead before it ships..

 

Go and Rust are very different languages with very different concepts though. They can never replace C/C++

Link to comment
Share on other sites

Link to post
Share on other sites

@FakezZ Thank you very much! :D

 

The programming languages aren't really the problem, because, the concepts are kinda the same, isn't it? I noticed it when I began with Java, I was pretty much just playing the course in the background because I already knew a couple things that I had already seen on other languages

 

Having said that I do plan to learn Node.js :) but Java too... (although maybe not PHP as I had planned)

 

The hard part is getting to the point where I know what I don't know and therefore know what to learn, that's pretty much my goal at this point in time regarding back-end, I'm still on it and you guys have helped a lot

 

Question:

 

Without mentioning languages (to avoid going off-topic), should my learning path be:

 

- Learning front-end basics

- Databases

- A programming language to interact with them

 

Is that pretty much it or what am I missing?

(avoiding advanced stuff, just the basics for back-end developer)

 

Thank you

Link to comment
Share on other sites

Link to post
Share on other sites

15 hours ago, Fredrik Svantesson said:

 

Lol, just watch that module system be dead before it ships..

 

Go and Rust are very different languages with very different concepts though. They can never replace C/C++

I wouldn't be so sure. Modern programming is different in terms of concepts too, though. And I doubt C/C++ being the way they are can keep being used for much longer.

Oh I am sure the module system will be a failure. With every C++ standard I just keep getting disappointed. I guess you can't really teach an old dog new tricks :/

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

7 hours ago, Hi P said:

@FakezZ Thank you very much! :D

 

The programming languages aren't really the problem, because, the concepts are kinda the same, isn't it? I noticed it when I began with Java, I was pretty much just playing the course in the background because I already knew a couple things that I had already seen on other languages

 

Having said that I do plan to learn Node.js :) but Java too... (although maybe not PHP as I had planned)

 

The hard part is getting to the point where I know what I don't know and therefore know what to learn, that's pretty much my goal at this point in time regarding back-end, I'm still on it and you guys have helped a lot

 

Question:

 

 Without mentioning languages (to avoid going off-topic), should my learning path be:

 

- Learning front-end basics

 - Databases

 - A programming language to interact with them

 

Is that pretty much it or what am I missing?

 (avoiding advanced stuff, just the basics for back-end developer)

 

Thank you

Oh based on how you approach learning, you are definitely on the right track. The thing you said about languages not being a problem is spot on actually, basic programming skills and good engineering will get you far in any language or field. 

 

I don't really think you should learn front-end unless you are also interested in being a full stack dev (good full stacks are rare and usually quite in demand). I would start with the basic protocols of communication in the web (how TCP works, then the HTTP protocol) and then start with API design. How REST APIs work, how they are designed, dos and donts etc. Then learning to use databases (how to connect, querying the db for data, designing your schemas so they are not very rigid and can be extended without sacrificing a lot of performance). As a start, I would start with node to actually tinker and do basic stuff, as it does abstract a lot which is not a problem if you already know how these systems work under the hood. Now as far as databases go, I think it is good to start with plain old MySQL and then also learn about NoSQL databases such as MongoDB as they are really hot right now (and for a very good reason tbh). Feel free to ask if you have more questions :) 

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

I guess I'll put in my two cents.  I spent a year as an intern and been a full time employee for about 7 months now in the financial industry, so everything I say is from that point of view.  Java dominates backend development in the enterprise space and most newer projects will be using Spring and Spring Boot.  Some jobs maintain old code and some are making new code.  Having a strong object oriented programming (OOP) foundation in Java is going to be your most valuable skill.  The core fundamentals of OOP can be transferred around to other languages if an opportunity opens up that isn't Java.

 

Now for your questions:

  1. Your gut feeling in your original post seems to be about right from my experience as far as technologies go.  The only change I would make is putting git first.  Not everyone likes it, but it's the industry standard.  If some company want's you to use something different, they will teach you.  If you have no programming experience go with Java first.
  2. Having frontend knowledge is good, but I doubt any would be expected from a junior backend developer.  It would be a nice bullet point on a resume though.

In my experience, the most learning you will do is from senior developers on your team.  Take every opportunity you can to learn from them no matter what.  Pair programming, reviewing your pull requests, reading a book they suggest, or asking direct questions.  DO IT.  That's how you will learn.

 

Since no one has suggested any books yet, I'll suggest a few that I read last two years that are better than any college/online course:

  1. Clean Code by Rob Martin (This is the book to live by)
  2. The Pragmatic Programmer by Andrew Hunt and David Thomas (This is the mindset you need to have)
  3. Test Driven Development: By Example by Kent Beck (This will make future you hate past you less)

@FakezZ Is also giving some great advice.  There are many paths to get to where you want to be.  You just have to find your own. :)

Link to comment
Share on other sites

Link to post
Share on other sites

4 hours ago, FakezZ said:

I wouldn't be so sure. Modern programming is different in terms of concepts too, though. And I doubt C/C++ being the way they are can keep being used for much longer.

Oh I am sure the module system will be a failure. With every C++ standard I just keep getting disappointed. I guess you can't really teach an old dog new tricks :/

Yeah, it takes quite a bit of experience to truly bring out the potential that C++ holds. Dont forget what all that hyped up highlevel stuff is all running on! ;)

Link to comment
Share on other sites

Link to post
Share on other sites

2 hours ago, Fredrik Svantesson said:

 Dont forget what all that hyped up highlevel stuff is all running on! ;)

Yeah, but you could argue that even C++ is running on top of assembly, but I doubt anyone thinks it's a good idea nowadays :P 

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

23 minutes ago, FakezZ said:

Yeah, but you could argue that even C++ is running on top of assembly, but I doubt anyone thinks it's a good idea nowadays :P 

 

I think you're very quick to turn down C++ and all it's strengths. I strongly urge any developer who really want to grow to truly learn it, and master it. Modern C++ has a lot of pro's that other (even more) high-level languages lack. Templates (w/ variadic arguments), multiple inheritance and much more control over classes and "interfaces" through pure virtual methods and stuff. 

 

I know both C++ and C# very well, and while both certainly has their use-cases, everything you can do in C# you can do in C++. The same does not apply to C#, and for good reason.

Link to comment
Share on other sites

Link to post
Share on other sites

1 minute ago, Fredrik Svantesson said:

I think you're very quick to turn down C++ and all it's strengths. I strongly urge any developer who really want to grow to truly learn it, and master it.

Is it useful for back-end too?

 

Just wondering, because I actually seen multiple back-end job postings listing C++ as either a requirement or under nice-to-have skills, but I don't know why

Link to comment
Share on other sites

Link to post
Share on other sites

Just now, Hi P said:

Is it useful for back-end too?

 

Just wondering, because I actually seen multiple back-end job postings listing C++ as either a requirement or under nice-to-have skills, but I don't know why

Yes. Frontend/backend is really just a webdev thing, but if C++ would fit in at it at all, it's definitely only for backend. Some projects I've seen (many years ago) actually used it as serverside scripting, which was pretty neat, but that project died pretty quickly too. 

 

Large-scale HTTP servers (apache etc.) are almost always written in C++ or likewise. If you are going to do any kind of lower-level networking (on TCP, UDP or even IP layer), chances are you want something native to maintain performance.

 

The reason C++ (and C) are sought-after skills, is because most often the foundation below whatever else you're working on is written in it. Which means if you have deep-rooted problems, chances are you can understand what you need to understand to fix it. Or at least find a workaround.

Link to comment
Share on other sites

Link to post
Share on other sites

9 minutes ago, Fredrik Svantesson said:

 

I think you're very quick to turn down C++ and all it's strengths. I strongly urge any developer who really want to grow to truly learn it, and master it. Modern C++ has a lot of pro's that other (even more) high-level languages lack. Templates (w/ variadic arguments), multiple inheritance and much more control over classes and "interfaces" through pure virtual methods and stuff. 

 

I know both C++ and C# very well, and while both certainly has their use-cases, everything you can do in C# you can do in C++. The same does not apply to C#, and for good reason.

Well, I am not really turning it down easily. In fact, I started programming with C++ since I was like 13 or 14 (even have some later projects up on github as well) and even though I don't use it for anything professionally, I still follow all the updates and spin up some test projects when I have time. However, I find a lot of things are handled very very poorly. My biggest problem is that it is so hard to use third party libraries. It is something that should be simple, but it ends up being a pain in the ass, leading you to either use huge libs like boost, or reinvent the wheel and hack around. I like neither of these options. I just cannot recommend C++ to anyone for any use case, especially since rust exists for low-level performance focused stuff.

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

Just now, FakezZ said:

Well, I am not really turning it down easily. In fact, I started programming with C++ since I was like 13 or 14 (even have some later projects up on github as well) and even though . I don't use it for anything professionally, I still follow all the updates and spin up some test projects when I have time. However, I find a lot of things are handled very very poorly. My biggest problem is that it is so hard to use third party libraries. It is something that should be simple, but it ends up being a pain in the ass, leading you to either use huge libs like boost, or reinvent the wheel and handle things poorly. I like neither of these options. I just cannot recommend C++ to anyone for any use case, especially since rust exists for low-level performance focused stuff.

It's not that difficult if you know what you're doing. Windows has NuGet (integrated into Visual Studio) that handles it quite oftenly just as easily as Linux distributions do. And even when that fails, there is CMake, which is just a breeze.

 

I just think you need to gain more in-depth knowledge about the build-process that is involved around C++ and different compiler toolchains.  C++ is much more difficult to master than easy languages like C# or Java, but you shouldn't say it's bad just because you're not willing to learn it.  Try writing a big, properly multithreaded application in C#. Then do it in C++. Then you'll see why I'm here defending it to my last breath lol. 

Link to comment
Share on other sites

Link to post
Share on other sites

7 minutes ago, Fredrik Svantesson said:

It's not that difficult if you know what you're doing. Windows has NuGet (integrated into Visual Studio) that handles it quite oftenly just as easily as Linux distributions do. And even when that fails, there is CMake, which is just a breeze.

 

I just think you need to gain more in-depth knowledge about the build-process that is involved around C++ and different compiler toolchains.  C++ is much more difficult to master than easy languages like C# or Java, but you shouldn't say it's bad just because you're not willing to learn it.  Try writing a big, properly multithreaded application in C#. Then do it in C++. Then you'll see why I'm here defending it to my last breath lol. 

I will definitely give it another try, but my other points still stand about the language. I have given it a try many many times, unfortunately.

MacBook Pro 15' 2018 (Pretty much the only system I use)

Link to comment
Share on other sites

Link to post
Share on other sites

On 8/20/2019 at 3:22 AM, Franck said:

 

Javascript run only on the client side but some code i would consider it back end. An example would be threejs that does 3d matrix computation and lots of other more complex 3d thing. A Lot of it is back end stuff.

Javascript is all over the back end nowadays. That's what Node JS is.

Link to comment
Share on other sites

Link to post
Share on other sites

On 8/23/2019 at 11:40 PM, Hi P said:

Why some people hate Java? (serious question) :o

 

It is super-heavyweight and the trend is long established towards writing light-weight single-purpose services running in disposable containers like Docker or Kubernetes. 

Link to comment
Share on other sites

Link to post
Share on other sites

Advice for the OP.

Spoiler

 

  1. If you want to do backend probably Node JS is your best bet. There are lots of online resources to help you learn it.
  2. Otherwise, I'd say take your pick of Java or C#. You can still write good backends in those languages, as long as you learn modern idiomatic style for them.
  3. You will need to learn about SQL databases:
    1. MySQL is dominant
    2. But postgresql is superior
    3. However, document dbs like MongoDB are the future, relational databases are tired and old.
  4. Do NOT neglect software engineering practices. Learn these as you learn the languages and their toolsets:
    1. Software engineering practices are the difference between someone who can code, and someone who can program.
    2. Software engineering practices are the main way i evaluate the performance of my developers.
    3.  
  5. This means git for source control.
    1. Yes lots of places till use svn or even, god forbid, cvs, but git is your best best.
    2. Do not be afraid of using the git command line. In fact, learn it before you go onto fancy GUI tools.
    3. Get yourself a github and/or gitlab account.
    4. Have a look at what open source projects you'd like to contribute to.
  6. Tests. Tests. Tests. Tests are never optional. Tests are your lifeblood. Tests are your safety line.
    1. Write unit tests in lockstep with the code.
    2. Do not make the mistake of thinking "code first, test later".
  7. It's a lifelong learning exercise. I always ask prospective hires these questions:
    1. What new language did you learn in the least year?
    2. What are its good points?
    3. What are its bad points?
    4. What would you use it for?

 

 

Link to comment
Share on other sites

Link to post
Share on other sites

4 hours ago, scotartt said:
  1. If you want to do backend probably Node JS is your best bet, otherwise I'd say take your pick of Java or C#.

I did an extensive search for jobs around me after my first post, and I agree with you, around me Java and Node.js are both equally dominant in terms of demand, C#, PHP and Python not so much (if any at all), and the most demanded framework is Spring :)

 

So my plan as I write this is (not in a particular order, besides from Java being the first) :

 

1) The basics of Java, I'm halfway through the course which includes and intro to JUnit, databases with SQLite, and Networking

2) MySQL and MongoDB

3) Spring framework

4) RESTful services

5) Git and Github

 

I will also learn Node.js once I'm comfortable with back-end in Java, I want to grasp the concepts on a single language before moving into another, but I definitely will learn Node.js that's for sure

 

4 hours ago, scotartt said:
  1. Do NOT neglect software engineering practices. Learn these as you learn the languages and their toolsets:
    1. Software engineering practices are the difference between someone who can code, and someone who can program.
    2. Software engineering practices are the main way i evaluate the performance of my developers.

How do I learn that?

 

What I've been doing so far has been google every single time I learn something new

"Java convention for X thing"  /  "X thing good coding practices"

 

Also, thank you very much, that was some solid input :)

Link to comment
Share on other sites

Link to post
Share on other sites

7 hours ago, Hi P said:

1) The basics of Java, I'm halfway through the course which includes and intro to JUnit, databases with SQLite, and Networking

Don't worry about learning some Java. It wont be a waste.

If you know the basic syntax and way around it, it will be much easier to pickup languages like Javascript, Python, C# and C++.

Link to comment
Share on other sites

Link to post
Share on other sites

18 hours ago, Hi P said:

So my plan as I write this is (not in a particular order, besides from Java being the first) :

 

1) The basics of Java, I'm halfway through the course which includes and intro to JUnit, databases with SQLite, and Networking

2) MySQL and MongoDB

3) Spring framework

4) RESTful services

5) Git and Github

 

That's a pretty solid plan. I'd put git a higher, like second.

 

As for how you learn the software engineering side of things? After you've got the basics of your language out of the way, there are software engineering books (websites etc too) and probably a ton of courseware on sites like Brilliant and Skillshare and those sites that seem to be advertised on every second science and tech you tube channel. ?

 

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×