856 karma · joined September 10, 2015
Thanks for any feedback and comments!
I also had a few things I was unsure about so I marked them as TODOs. Thanks for reading, appreciate all the comments!
It's an OSS, you can check it out here: https://github.com/wasp-lang/wasp
Our latest demo, visually inspecting your web-app code: https://wasp-lang.dev/#wasp-inspector
Would love to hear what you think!
We are still pretty early so at this moment it's hard to say how would this exactly work. But I believe we could also make it a part of the git and CI workflow. E.g. changes would get applied to the .wasp files and committed and the new revision would get deployed.
If you are interested, we are working on an OSS programming language compiler in Haskell, and we are looking for contributors :) https://github.com/wasp-lang/wasp
https://remaketheweb.com/ - seems cool, full-stack framework, not totally flexible but might be interesting for simpler apps
We are working on an open-source project for developers that would be both easy to use but also flexible and scalable. You can see it here: https://wasp-lang.dev/ - it's still a work in progress, but would be cool to get your feedback!
- expressive type system
- easy & intuitive to start with, but also powerful if needed (low floor, high ceiling)
- has a relatively small set of core concepts which are then composed together to build things further
- rich set of libraries (although pretty obvious and not really a feature)
I think our search for the "grail" general language will continue, probably forever. Languages such as Haskell, Rust & Go (and probably a lot of others I haven't heard of) are breaking the boundaries and introducing new concepts which then slowly spill over to more "mainstream" languages (e.g. the advent of functional programming constructs we are witnessing in Java, JS etc.).
Other than that, I also believe that more and more DSLs will start appearing, which is basically languages specialised for a specific purpose - which will make them extra convenient in their domain but not usable in the general case. Also, I expect the tooling (IDEs, build systems) to become more tightly integrated with the language, especially for the DSLs - creating the end product which at the end will be usable not only by the programming experts.
I have actually, together with my brother, been working on such an idea for the past year. We made a DSL for the domain of web apps - it is basically a declarative language that compiles to the stack of choice implemented in the general language (e.g. React/Node). This makes it possible to express some web-app specific concepts with much less code, but is also constrained to that specific domain.
If anybody wants to take a look it is here: https://github.com/wasp-lang/wasp
Would be interesting to see the results of your research and what majority thinks are the ideal language features.
Why is it so? I believe because everything started switching to web lately so it gained a lot of focus. Being open-source in nature it attracted a lot of new ideas and this is what lead us to the influx of new frameworks we have today.
It is a good thing because innovation->improvement, but also a bad thing because a huge mess and choice paralysis :D. I also feel overwhelmed with all the transpiler and compilation steps, pretty much gave up on understanding everything.
How to hate it less? What @valand suggested below makes sense to me, by focusing less on the technology and its brokeness, but rather on the product, best practices and the end-goal. Also, even if the build system is a mess we can still write clean, high-quality and tested code which can be reused. This is what we did, propagated this culture through the team and that helped me hate things less. We were reading engineering books, having clean code dojos, best practice presentations etc. My takeaway from that was choose your victories when you can have them and enjoy them.
Another approach would be to join the madness by creating your own solution - which is what I also did. I know it is a https://xkcd.com/927/ case, but it was too fun and interesting so I couldn't help it :)
We basically built a DSL that compiles to the underlying stack of choice. If somebody wants to give it a look it is here: https://github.com/wasp-lang/wasp
Good luck and hope you find peace with whatever you choose!
But, from my experience, already learning Haskell would improve ones programming skills, especially if you haven't been exposed to the functional programming before. It is really a mind-changer and equips you with new perspectives which you can use in other programming languages as well.
So I would definitely recommend investigating Haskell, and maybe after some time you can then also go into the actual Category Theory and see how it connects to your Haskell knowledge.
Obviously the main challenge, as other mentioned, is that not all of the data is present on the frontend. Also, user cannot permanently change the app, since just the DOM is changed and that is not persisted anywhere, am I right?
But the whole idea to be able to peek "under the hood" of an app and customise/edit it sounds very appealing to me! I am actually working on the open source project that has that aim, to "understand" the web app from within.
But of course for that we had to go with a bottom-up approach, so we are building a DSL for describing how a web app behaves: https://github.com/wasp-lang/wasp
Would be happy to hear your thoughts on it!
Doesn't sound as cool when I read it now as it was in my head :D.
From my (limited) perspective and experience, "deeper" you go (closer to the research, or put in simpler words, less people understand what you do :D), less direct outside pressure is put on you. Which is kinda logical, often when non-dev people can visualise the end result (and believe they understand it) they get impatient and cannot understand "why does it take so long to get it done".
So I would say these might be the important factors: 1) Founders coming from the engineering/scientific background 2) More hard-tech work domain (e.g. crypto, AI/ML (although a lot of fakeness here), system performance, compilers, ...) 3) Bigger company/institution that can afford to work on such problems
So the first problem is to learn what to learn. When I was trying to teach my gf to code (she is also non-engineer) it was actually pretty overwhelming for me, because I needed first to give her a lot of what-is-what knowledge. E.g. how internet roughly works, what is server, what is client, what is db, etc.
At the end I bought some Udemy full-stack web development course for ~ $9.99, they are always on some kind of sale. That worked pretty well (although she didn't get very far, I have to push her again :D), because they explained everything from scratch so you can acquire that initial what-is-what understanding.
So I would advise you to first acquire that general kind of knowledge, understand the basic parts of web (development) and then dive into the specific technologies - you will have much better context of what are you doing and how it fits in the bigger picture.
I believe any course with a decent amount of stars/reviews would do well. Feel free to ask more here.
Hope this helps!
The more common problems that are recognised as "patterns" are going to be handled by the specialised tools (such as Webflow which you mentioned), but there is always going to be the next level of complexity which has not been tamed yet.
This is how I see the innovation cycle: New tech that makes X easier comes out. People use it and do things they couldn't do before - but then the patterns emerge, people often do Y but since this tech is general it takes a lot of work to achieve it. Then the new product comes which makes Y easier.
HTML and CSS (especially advanced preprocessors such as Sass /Less) will always be more expressive than some visual tool, and some things will be really hard/clumsy without them. Of course, the question is in what volume will such "harder" problems be there in the future.
What to learn? HTML/CSS/JS are still very much used, but more and more within the different frameworks/tools. So maybe it wouldn't be bad to learn e.g. React. Just focusing solely on the HTML or CSS itself, I am not sure how beneficial is it to have e.g. 80% mastery vs 99% mastery. What kind of projects would require and adequately appreciate such knowledge?
Btw, I am working on an open-source low-code solution - as opposed to Webflow and others, we still very much rely on the code, just try to abstract away the common patterns and let developer focus on the unique product logic.
In our vision of the future the coding is going to stay, it will just become more and more integrated within the tools which will take away the "setup" complexity. So more and more people will be able participate in the development, even coding, while having the "safety net" of the underlying tool.
This is our repo, would be happy to get your feedback! https://github.com/wasp-lang/wasp
I think pretty much whatever you do, if you do it long enough, at some point you are going to discover there is a competition. It is a validation that your idea makes sense.
In your case you discovered it early, even before you started. But does that really matter? What would your decision be if you have been working on the project for 1, 3 or 6 months and then discovered it? I would ask myself that question in your situation.
If somebody had the same product idea, it is not like they "own" it now and you are not an original anymore. If your intrinsic motivation for doing it is strong enough and you want to do it long-term, it shouldn't really matter. Of course, I am assuming here your competitor is also in the early stage and has not overtaken 90% of the market.
You don't even have to differentiate in the beginning - why would you? You can both offer the same service - there are Pepsi and Coke, Intercom and Drift and they basically offer the same service.
As the time progresses, it is likely both of you will differentiate more and more, and orient toward a specific niche of the customers.
You even have an advantage coming in the second - you can learn from the existing solution and make it better.
So alltogether, I would say that the main question is whether this is something you personally want to do long-term or not, whether you have the internal motivation for it. If it was just a "quick" idea you had and the main motivation was to make a quick buck, then probably not. But if this is something you are interested in and want to keep doing it, then why not.
I think the most important question is: What interests you? And I believe the answer should be more general than a specific technology such as AWS or GCP.
You said you would like to grow as an engineer. There are typically 2 directions - going more into managerial/leadership roles (e.g. staff engineer) or being more of an individual contributor (no management, only engineering). Good book on this - Radical Candor. It is also totally ok to switch between these roles.
About being afraid - what do you have to lose? With engineers being in such a high demand you definitely won't end up jobless. If you are thinking about doing it and are not happy with your current company, I'd say do it and fail as many times as needed until you get where you want to.
Another good way to learn and build a portfolio is doing a side project. You can then open-source it, write a blog post on it and sort of become an "expert" on that topic.
Regarding your wife and family, probably the best thing IMO would be to talk to them - explain them your position, ask for support and agree with them how it is going to work.
When I don't know what to do, what typically helps me is to take action. Any action. Once I start doing things, things start to unravel and become clearer very quickly.
Hope this helps!
Haskell is also a good choice for writing DSLs and embedded DSLs.
Do you have a specific problem you would like to solve?