Switching to a new ecosystem is always exciting and gives you a fresh perspective on things that you might not have seen before. I'd say give it time. See it through the honeymoon phase. Everything is shiny up until we realize that these are just tools to solve our problems. If after all these and you're still in love with the new language/ecosystem and your situation permits, I'd say ride that enthusiasm and go for that career change!
Like the word "honeymmoon phase". I have tried so many different languages and technologies during my career. Longer I go, clearer gets to me that, language and technologies are not the most exciting thing (because honeymoon phase will end) but the result that we create and communication with other team members.
Came here to say this! As a junior iOS and Node dev I've done both professionally for maybe 9 months each. I enjoy both environments but each has their downsides. I was educated in OOP extensively so I have a bias towards type systems. I love Swift but hate Xcode (I've managed to bring all my colleagues to the VSCode holy land). I enjoy JS and most of the issues I have with it have been fixed in ES6 and avoiding this wherever possible. I'd still love to move over to TypeScript at work but I've yet to find the opportunity to showcase it to my colleagues.
Basically OP, John is right here. And like Patrick M suggest maybe try TypeScript.
Hey! What's up with Xcode that you didn't like?
There were many things I liked about Xcode but nothing uniquely special compared to other editors and positives were ultimately outweighed by the negatives.
I haven't used the most recent version in anger, V9 I think, so YMMV. But it was often super slow in small projects with maybe 50 classes. It would take seconds when doing anything with interface builder. Also, with interface builder using XML for everything it was a horror to use with Git so I'm investigating either code generated UI or having many tiny storyboard files. But then making reusable nib files etc. was always felt clunky. It would also get caught in an indexing loop often, requiring a restart. They only just added basic Swift refactoring features in the recent major version, which might be related to the shifting ABI (they keep saying pushing stable ABI back to the next release) but I don't know. The different between adding folders or groups not being intuitive and I think defaulting to groups, requiring you to manually add all the files inside the matching folder for Xcode to recognise them. That final point might be inaccurate from memory but something about that process was always annoying.
I know that it's a free piece of software but compared to every other IDE I've used it always felt lacking. Considering iOS development is so tightly coupled to Xcode it felt like there were no major benefits using Xcode to program, other than interface builder which was always slow or required some multi window stuff. And I always felt very constrained when working remote or from home without a big second monitor, Xcode on a 15" MBP felt cramped.
Maybe I should play with AppCode next time I get some iOS work on my plate.
Sounds like you need a refreshing change of perspective.
Definitely look into other languages, as anything different you learn helps you grow.
In the end I just end up going back to js and keep doing what I like
Try ELM programming language. It compiles to JS. It's statically typed language. The compiler is similar to swift in the sense that it doesn't let you compile with mistakes. Error messages are great.
The language has a promise of "No Runtime Exceptions".
I'm gonna link a presentation (which is one of the best presentations ever):
For one thing, you won't see anarchy in ELM. ELM has built in things like: immutability, virtual dom, state (redox like), architecture, tiny assets, improve compiler (faster in 0.19), tree shaking.
I strongly advise you to watch the presentation at least give it a minuter you won't regret it I promise that.
I definitely will! The question is always finding projects that use this technology..
Since you mentioned iOS I guess you have to understand, by practicing beyond a tutorial, if you're really into mobile development or if it's just a reaction to the disappointment that the Node ecosystem brought you.
So the question: are you looking for a more structured environment to develop on the server/backend side (hence your appreciation for Swift and Kotlin) or you want to switch altogether to mobile?
Valid questions. Not sure yet. I definitely would like the structured environment of development. Mobile development is something that I guess would be nice to get into. But the tricky part is throwing away years of experience and starting over
What experience do you throw away by switching to mobile development? I'm sure you've learned much more about programming in general rather than some Node.js specific things.
I even doubt that anyone can "throw away" experience. It's there in your mind, but you'd know more and get more experience if you will learn Kotlin or Swift.
Don't be scared of learning something completely new. That's a nature of humans. We learn more and more and those who don't usually lose.
Well maybe what you're looking for is in the middle. A more structured programming language that you can use on the web too. I know Swift and Kotlin both have web frameworks but I'm not sure how big the community around them is and the job market for those. You could consider checking out Go which checks a lot of your boxes: strongly typed, fantastic IDE support, comprehensive standard library, as fast or faster than Node. There are definitely less third party packages than Node but that might be a plus :D
Valid alternatives can be Python or Ruby, though they are both dynamic (so less structure in a sense), they are solid "boring" languages with a long history and huge communities.
I guess Elixir (functional and dynamic) it's also a valid alternative.
And, to second someone else's advice: do give it some time. You won't really know whether it's for you until you've built something with it. My interest in mobile development was much higher during the first couple weeks than it is now.
This is very much incorrect. Sure, companies try out React Native, but more and more are ditching it due to it just not being good enough. Native development is always better, and native developers will always be in demand. Please stop spreading FUD.
Is native development "always better"? What if I'm a startup with limited resources and three developers that wants to reach everyone, regardless of their device?
Thanks for the criticism. I think the cross-platform approach will always be appealing to groups with fewer resources, but I agree that it's limited, especially when you want to do something that touches the operating system and the unique capabilities of a given platform. In my experience, it's actually a total pain in that case.
Creating an electron app from a web app is a cinch and can easily be improved upon over time to deliver a better experience. Once we grow large enough, or the desktop app becomes a huge draw for new clients, we can dedicate time to native.
I imagine react-native faces something similar, though from what I've seen, RN is still a good option for most apps.
I encourage you to look at focusing on a stack that you really feel at home with, you'll be happier.
What's tricky is jumping from one stack to the other when you have 10 years of pure frontend/CSS/JS experience.
I've had more fun in the last couple years learning Swift and iOS development than I have in a long time, it rejuvenated my career and my love for programming.
My best advice for you is to try and mimic an app that you like. You'll see things like neat little animations and end up going down a rabbit hole trying to figure out how to do it yourself.
Also, try to get something into the app store. You'll learn a lot about the whole process and get to experience the highs and lows of your app going through the Apple approval process.
Do it! I'm an iOS developer, and I fell in love with Swift the day it came out. It's such a satisfying language to work with. Once you go down the directive of native apps, you never want to go back to web. The web world feels so far behind in so many respects.
For as flawed as many people say Xcode is (and it is), it's a Lamborghini compared to pretty much anything else. Here's what I think happened, and it's really simple. You've been driving crappy cars your entire life, and you suddenly got behind the wheel of something high quality. You don't need to argue for or explain how you feel. You just know you like it, and you want more of it.
I think Apple's care for the user experience bleeds beyond its own consumer products. I think they take the same care into the developer tools they design. They only hire programmers who have that sort of vision, and it comes through in everything they do.
You like this experience because someone designed it to be better than anything else on the market.
My take is that every framework, language or platform has advantages and disadvantages, every single one. Some are easier to spot than others. I would suggest, use it for one serious project. Then, you will know.
mentions, if types are what you're looking for, consider TypeScript. I wrote up a little intro to TypeScript a while back.
In fact, it says a lot about TypeScript if the creator of node.js is building a new secure TypeScript runtime on V8. Great video and some other points about node.js in this post.
I got to program in TypeScript (v0.8) for two years. It definitely facilitated making a large scale application more robust and reliable.
The nice thing about it was getting ES6 features on ES3 & ES5 engines. Plus static typing.
The disappointing thing about it was it not being CoffeeScript. (Or more to my liking, the abandoned GorillaScript, which was a more well thought out kind of CoffeeScript. In my opinion.)
These days, we have ES6. Takes a bit of the new car smell out of TypeScript. (Albeit it without static typing. Yet. That may come someday.)
Personally, I'm waiting for Elm 1.0.
In the meantime, I'm back in C++ land. (Ow ow ow.)
Well.. I would say it's always nice and exciting to see and experience something with a beginner's mind. I jumped into js realm about a year ago, mostly exploring node as backend and react/vue as front-end and today it feels like I am getting sucked deeper and deeper into these stuff and it's getting more exciting everyday.
I wish you enjoy your journey my friend...
I also felt the whoa when I tried Swift, so I know what you mean!
It's never wrong to check out other langs. Especially in Frontend, I think it's important to know other means of developing interfaces. There are lots of out there: Qt, JavaFX, Immediate-mode GUI vs. Retained, React Native, VB, iOS Constraint-Layouts, Unity-UI etc.
It gives you a broader perspective and maybe some appreciation for Frontend-Dev.
Career-wise keep in mind that the iOS-Platform also has C#, and I'm not sure if you can go Swift-Only just yet in that environment, since lots of apps out there are still not using it.
Knowing more languages and paradigms will make you a better developer. I like the general rule: learn 1 new language each year (at a superficial level ofc). Knowing a Strongtype language is the closest next step, Reactive paradigm (if you don't use Redux yet), and at the other end is the Functional Paradigm.
So my suggestion is to learn Java and TypeScript :)) if you want to stick to the web. If you go on mobile you may want to check Flutter too or Kotlin.
Either way I don't blame you, I hope to leave the JS arena myself soon, "I'm too old for this 💩".
Just search for "dart" and read some of the articles. I'm curious to gather your thoughts on this.
Great article. I'm an older (not necessarily more trained) IT guy who now needs to develop as full time job. All my life I used high level tools like Clipper, Delphi and then PHP. All of a sudden I need to develop for mobile; while trying my best for a PWA in PHP, I learned about Nativescript. Great tool. But I see what you mean about node.js. You need blind Faith to go along. As other say here, Typescript helped a lot. I'd try Swift but I really long for a tool to build ios/android apps with a (sorta) single codebase
I feel the same. At work, we are using nodejs + react and boy, everything is a struggle; Everytime there's an update with the packages, somewhere somehow, different bugs are introduced.
I'm high considering going back to dotnetcore or springboot for the next project and keeping react frontend for now.
Have you looked into ReasonML at all yet? It let's you keep developing for the web, without throwing away all that React knowledge (ReasonReact) and addresses many of the problems you cite with JS. And unlike Typescript, it is a true strongly typed language, built on top of the battle tested OCaml, with a syntax meant to be more familiar to JS devs (go try reading some pure OCaml!).
The eco system is getting more and more mature every day and the community is still small enough where getting help on their discord channel is a guarantee (the community is the most welcoming I've ever joined). It practically eliminates runtime errors, it compiles blazing fast and it's for the front end as well as the server.
Teams are using it in production, though it's not that widespread yet, so not sure if you can learn it and go out and get a job programming in reason somewhere yet, but you can introduce it at work perhaps, and it will add another tool to your tool belt and keep you engaged with the web.
I highly recommend checking it out! Good luck.
Consider Typescript then.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.