5 ms·
My biggest problem learning a second language is that it's so much less useful than the first. Ten years ago I learned C# and since then I've dabbled in other
by JamesBarney 7y ago
My biggest problem learning a second language is that it's so much less useful than the first.
Ten years ago I learned C# and since then I've dabbled in other languages like Haskell or Lisp which were a little fun, but I keep getting drawn back to learning more about my stack. There's still decades of knowledge I lack about Azure/Entity Framework/Asp.Net/Xamarin/Sql Server/WPF/C# CMS/C# CRMS/C# e-commerce/Roslyn the opensource compiler/Blazor/Typescript/React/CSS. (Not to mention all of the useful soft skills, like sales/ marketing/negotiation/management)
And I'd rather be able to build out a desktop app, a web app, or a mobile app than be able to build out a web app in js-node/C#-mvc/ruby-rails/python-django.
Basically when I learn I want to be able build I couldn't before (like a mobile app) or get better at building(learn how to better optimize t-sql queries). And when I've spent time learning new languages I felt like it wasn't as useful at delivering on these two goals.
- giantDinosaur 7y agoDoes most of what you listed matter? Yeah - I know, it matters to make money(!). But it all looks really similar to me. If, instead, a new language taught you more about recursion or typing or a different way to view program structure, isn't that more valuable than learning the latest JS framework? or Azure? What does Azure really offer from a learning perspective? You know, I use TypeScript a lot, but it has taught me absolutely nothing fundamental, and has not made really made me better at anything other than Typescript. Playing around with something like Haskell made me think about some pretty fundamental structural and domain modelling questions, which I feel, although perhaps cannot prove, has been much more valuable.
- JamesBarney 7y agoI've spent a couple of weeks on Haskell and a couple of weeks on domain driven design and I felt like the latter made a larger impact on how I saw using code to model the domain.
- vizzier 7y agoMaybe look at F# for something .net compatible. Personally its use in some contexts, particularly those using the F# type providers has served me well. I also prefer to use FSX scripts over CSX in contexts where that is useful. I find my deeper knowledge of the .net infrastructure easier to leverage than having to learn powershell but FSX syntax also cleaner for scripting.
- platz 7y agoI'm generally an FP advocate but F# on the CLR has always been an uphill battle in terms of development of the language (especially lately) and providing a compelling case to outsiders to spend resources on F# over C#.
- JamesBarney 7y agoI've used f#. Type providers were really cool. And I like how terse it is but I feel like the gap is narrowing, and I couldn't ever use it on a real project. I'd feel guilty building a project for a client that is supportable by a tenth the number of developers without very good reason.
- dastx 7y ago> My biggest problem learning a second language is that it's so much less useful than the first. Your IDE should work with you to make it more useful. For sure your knowledge of another language isn't going to be as great as your first language, but I've personally always relied on tooling around that language to tell me where I'm wrong, then I can go find out why it is that my IDE is complaining and I'll then decide whether the IDEs error makes sense or not.
- apatheticonion 7y agoWhen I first learned Python, I found it hard understanding how another language could offer more. What I found was learning other languages provided value in the form of insight which changed how I wrote my primary language. JavaScript taught me about the value of concurrency, C# taught me the value of types and DI, TypeScript showed me the complexity of C# wasn't necessary, Go taught me that I code too much and say too little.
- justanotherc 7y agoI 100% agree. The first language I learned in highschool was VB6. I only went to VB .NET when VB6 stopped working. I next learned PHP because it gave me superpowers on the web that VB couldn't. When Ruby on Rails became popular, then Node, I dabbled in learning those but I just couldn't get excited about them because it didn't give me any more capability than PHP already did. I generally only tackle learning new things if it provides me immediate value to do so.
- capableweb 7y ago> I generally only tackle learning new things if it provides me immediate value to do so. In general I agree with you, but I think this is taking it a bit too far. My journey was similar, except PHP was my starting language and I was doing frontend (so HTML+CSS+JS) at the same time. But, now I'm doing Clojure full-time. But not until I spent 2-3 years on-off learning it. It wasn't until 1.5 year ago I actually sat down and started writing things in Clojure. But if I had the "only if it provides me immediate value" mindset, I would never have learned Clojure. It's not until now I'm more productive than I ever been, but that required a bit of uphill fighting. But I'm so glad I stuck with it, now I can't imagine programming in something else. Which has ruined me a bit, but I'm happy with that.
- slifin 7y agoIt's such a nice language I feel calm writing it
- justanotherc 7y agoI definitely understand your reasoning, but personally I don't see how I would be more productive by switching languages. Maybe I just don't know what I'm missing, but I feel pretty dang productive with my current stack. And I'm working on a long term project for 90% of my time, so even if I could be more productive, I don't think I could justify re-writing 40k LoC. I also don't really get emotional over the language choice... I'd ditch PHP in a second if it made sense to, but IMO a good architecture can enable development speed FAR better than a good language can. The language choice mostly just comes down to syntax preferences. To each their own.
- caseymarquis 7y agoYou can also build your own .NET frameworks like ASP.NET or Entity Framework using reflection and expressions. All the tools that these frameworks use to analyze the structure of your code and dynamically compile new code are part of .NET. It's not as DSL friendly as something like Racket, but you can generally get your own DSL based on class, expression, and attribute analysis up and running if you put some time in. The .NET rabbit hole goes quite deep.