Summary
Good morning Good morning,
This week, for once, we're going to talk about software development (no kidding??).
And I'm going to try to shed some light on why I chose web development over other fields, and ... there are some! (who's for a bit of assembling here??)
Got a hot drink handy? OK! Let's get started!
This list isn't exhaustive - there are bound to be areas I haven't mentioned - but I'll try to give you an idea of what's out there.
Foreword: When I say "native", I mean that the application is designed for the platform mentioned immediately after it, as opposed to so-called "hybrid" technologies, which allow you to target several platforms with little or no modification to the codebase, but with limits.
Since I'm in the Apple ecosystem, this could have been my main choice, so I'll start with this...
The iOS developer is a developer who develops native applications for the iPhone, and by extension for other Apple products such as the iPad and Mac.
In fact, just like the brand's customers, iOS developers are part of an ecosystem, using xCode to do their work. xCode is Apple's IDE (development environment), a bit like Visual Studio for Windows developers.
Everything is integrated and it works very well, as long as you stick to Apple and respect Apple's guidelines.
Previously, Objective-C was the programming language used, but in recent years, Apple has decided to adopt Swift, a more modern programming language.
The big disadvantage, as I see it, is that you're totally at the mercy of Apple, which strictly controls what happens on its platforms.
After all, that's why, as a user, the iPhone is so great... but as a developer, it's a bit frustrating.
The only way to get your application out there (officially and therefore used by the masses) is via the App Store, where there's a validation process that can be tedious (I remember some...), and beware if you don't respect the rules.
Access to an Apple developer account costs $99 per year, and you must have a Mac to be able to develop ("xCode" only exists on Macs).
For example, the Epic Games case, which tried to get around the App Store rules by selling directly in-game, without going through Apple's "in app purchase", and was banned from the App Store.
Respect Apple's rules, I said! No way!
In fact, the main reason why I use Apple as a user, but don't develop for it, is this.
I don't want to give too much power over my livelihood to a third-party company...
Because there aren't really any safeguards...
The Android developer creates native applications for Android.
His development environment is Android Studio, if you use the Jetbrains suite (PHPStorm, Webstorm, Rubymine...).
You can get a feel for Android Studio, as it's based on IntelliJ IDEA.
Previously, the programming language used was Java, but in recent years Google has decided to switch to Kotlin.
To distribute these applications, you mainly use the Play Store, but there are alternatives such as F-Droid and Amazon's App Store.
It's the more open nature of Android compared with iOS that makes it possible to have alternatives to the Play Store.
However, these remain in the minority, with the Play Store remaining the main means of access.
Access to the store will cost you $25 for life.
More open than iOS, Google is increasingly pushing PWAs (progressive web app), enabling developers to create web applications that can then be "installed" on Android, which is closer to the native experience, even if it's not yet perfect.
More business-oriented, they develop applications for Windows.
(Microsoft is overwhelmingly in the business world).
As Windows has evolved, native applications used to be based on the Win32 api.
Microsoft introduced the UWP (Universal Windows Platform) api, the idea being that with a single codebase, it's possible to target the Microsoft ecosystem (basically, the Xbox).
A fine example of an application that makes good use of UWP is Unigram, the unofficial Telegram client for Windows.
In the Windows ecosystem, the "star" programming languages are going to be things like C# or lower-level things like C++.
Since Windows has always been open, it's possible to distribute applications with a classic "installer", although it will want to sign it with a certificate attesting to your identity.
Less restrictive than Apple, this certificate can be issued by a trusted authority other than Microsoft.
(With Apple, for Mac applications, you have to get them signed by big A).
Although Windows has always been very open, since Windows 8 - 10, Microsoft, like the others, has put its application store first.
There are frameworks that allow you to target several platforms with the same basic code...
React Native (yes, it's the little web of the React web framework), for example, lets you create applications with a "native" feel, using JavaScript. Targeted primarily at iOS and Android (and I think Windows is starting to come on board too).
Flutter, from Google, uses Dart as its programming language.
Coming from Google, the tutorials and design are very "material design" oriented, the interface elements pushed by Google.
I've deliberately left "Ionic" off this list, as it's purely web-based, in other words your application is an embedded browser that displays HTML and CSS and executes JavaScript.
There are also things like QT, which exists at a lower level, because it's C++, but it allows you to create for several platforms (including Linux).
React Native and Flutter use native operating system elements for display.
As I said, this list is not exhaustive, I just wanted to show that the world of development is vast.
Now that we've had a good look at what's out there, let's talk web!
There are several notions...
The back-end is the code that runs on the server, managing data, requests, users and so on.
Basically, it's the code that you, the user, don't see.
Back-end languages may include (but are not limited to): PHP, Python, Ruby, Java, NodeJS, C#, etc.
And frameworks include : Symfony?, Laravel, Django, Ruby on Rails, Spring, etc.
The back-end communicates with your database (PostgreSQL, MySQL, MongoDB, etc.), in-memory databases like Redis, or graph-oriented databases like Neo4J.
The back-end exposes all the data required by the front-end.
This is what happens in the browser; it's the code you see, which will display data, forms, etc.
Here the number of languages is limited, since it's HTML, CSS and JavaScript.
There are JavaScript variants, such as TypeScript, which is a superset of JavaScript, adding features such as typing.
Typescript is transposed into JavaScript, so it can be used in any browser.
Front-end frameworks include StimulusJS, VueJS, React, Angular, svelte and more.
If you're too lazy to make CSS from scratch (like me), there are frameworks like Bootstrap, TailwindCSS, etc.
These are the developers who know how to manage the whole chain, what happens on the servers and in the browser.
I fall into this category, but for the front end, I try to keep things simple. I know React, but if I can use Stimulus instead, I'll go for it.
Because I find that React (and especially Redux) too often complicates things.
React and Angular are technologies that, if you really want to master them, you can only do so much, whereas technologies like Stimulus or VueJS are much simpler.
As far as I'm concerned, a technology like React only makes sense for large groups like Facebbok (its creator).
I'll say a few words about it here, because it's a hot topic right now.
Microservice is the idea of dividing your application into several services, which communicate with each other.
It's often used in large companies, because it can be relevant, with each team working on its own independent microservices.
The monolithic approach, which I'd recommend if you're just starting out, where everything comes together in one large project.
In my opinion, it's a mistake to go down the microservice route. It's an efficient way of working when you have large human (and therefore technical) resources.
Is that what it's all about?
I'm thinking here of Ruby on Rails or Symfony...
Let's say you're not a developer and you don't have a lot of money, but you've got an idea...
Ruby on Rails or Symfony, once you've learned how to use them, will enable you to create what you want to create without it costing you too much, and I'm just one example.
Two years ago, I went 100% freelance... and I based my entire business on Symfony.
Sometimes I work on pretty crazy projects, where I'm the only developer, because a similar project using other technologies would require far more resources from the client (it would take five people like me).
But I also sometimes work in larger teams, always using Symfony, because it can adapt and be just as relevant in larger structures as in SMEs.
This site is an example. Did you need anything to read this article? No, you just use your browser, and that's it.
There's also no third party between you and me (well, your browser, if it respects Web standards, then it's not a problem).
So it's possible to create something, make it accessible, without waiting for validation from anyone.
Time is a precious resource, and it's a pain in the ass to spend days waiting for a blind to be validated.
As long as you respect the law (normally), no one can take away your site or web application from a store, so if Apple or Google decide to fire you, you're left with nothing but tears in your eyes.
There's no problem with cross-platform compatibility: the web goes everywhere.
If you want to make an application that "installs", you can do so with tools like Electron. Admittedly, it's a memory hog, but it works and has helped companies get off the ground (Slack, for example).
As I've said before, it's an open standard, which means that lots of people are working on it, and some really cool things are coming out of it.
That's why we have such a wide variety of front-end frameworks...
(And it's sometimes hard to keep track).
Vue, Angular... and my favorites Turbo and Stimulus, which is the basis of Symfony UX...
As a result of this constant evolution, the sector is self-regulating, sometimes leading to nonsense, and the Redux craze was one of them.
Redux makes no sense in an SME, hence the article by its creator.
As a result, nowadays, in addition to the opportunity to learn something new every day, there's something for everyone, from the small start-up to the large group making a profit in billions of *Insert currency here*.
In fact, my (admittedly subjective) opinion...
Is mostly based on values of freedom and accessibility, and I'm sure I'm not the only one with these values.
And of course, as a good geek, when I see a training course on SymfonyCast, I spend my weekend on it ... (help!)
In short, the web allows you to do crazy things... all you need is an idea (and a bit of tech skill, I admit!).
Have a great week, and see you soon for a new article.