Swift isn't a language that opens your mind like Lisp or Haskell, but it seems like it is a language that can reset a career.
Swift isn't a language that opens your mind like Lisp or Haskell, but it seems like it is a language that can reset a career.
One's career is built more on knowing the ins and outs of the significant collection of frameworks provided by Apple, not the language. The language can be used to explore new design patterns and implementations, but it's really the API that makes it capable.
I think Swift is as much a barrier to entry as Objective-C (i.e., not a very big barrier). The hard part is knowing the APIs available, when to use them, how to use them, and how not to use them. That has not been reset with the release of Swift; in my experience with the language so far.
So yes, you do need to know the Cocoa APIs. That's extremely important for developing applications today. But the applications of tomorrow will be developed using APIs we don't have now, APIs that are based around idioms and design patterns that will be developed over the next year (or few years) as people explore Swift and figure out what they can do with it that's different from Obj-C.
Apple will undoubtedly define many of the idioms and design patterns themselves. But there will be many that emerge from the community, from experiments that people do and open-source libraries they write.
I don't believe that languages influence API design very much — unless they are of a fundamentally different paradigm, which Swift is not.
Most of the iOS concepts I see new developers struggle with are related to architectural decisions not informed by language design. For example, the biggest thing I see new iOS devs struggle with is reusable table/collection view cells: the concept of cells moving into a pool once scrolled off-screen and re-used was made for performance reasons, new developers often attach model state to their cells and end up with all sorts of bugs. This is not a language issue.
APIs are where the majority of the learning is. For example, if you try Reactive Cocoa (or Swift RX), you are going to be thinking about your app design in a completely different way. Same thing applies to auto-layout, device trait collections, layer-backed view hierarchies, and so on. These concepts are not likely to be influenced by Swift, and these are the things that really matter.
That said, I do see Swift eventually dropping message-passing-heavy APIs (NSNotificationCenter, target:selector patterns) in favour of more strongly typed APIs. But most developers should not find the transition jarring.
As it stands though, it's just another walled garden. Aren't developers tired of those yet? Even microsoft started opening up .NET a lot more. Who, in 2014, creates a new programming language and thinks it's a good idea to lock in the developers to Apple products?
Maybe the language will be a revelation and it'll be implemented by volunteers on Linux and what not. But until then, what's the point?
Tell me, iOS/OSX developers, why bother? I want to know why people think it's a good idea to learn Swift at this point (other than purely for technical curiosity which is great).
Learning Swift really isn't a big deal.
If you want to make something, then just make it. If you need to learn something that might not be permanently useful: so what?
Really, the knowledge you learn when developing an app is not "wasted" because the language is proprietary. The important parts will relate to design and architecture, not implementation details such as language used.
Once you are a competent programmer you don't really "learn" new languages, anyway. You just jump in and use them, then look up reference when you get stuck. It's a trivial thing in the scope of building an application or a game.
> Maybe the language will be a revelation and it'll be implemented by volunteers on Linux and what not. But until then, what's the point?
What's the point of developing in Objective-C? For practical purposes it is a proprietary language. Yet it is used by many people and used successfully. The point is to build something that will be used.
Your argument applies equally to many successful languages and development environments. I don't think Swift should really bother you, considering what it is designed to replace.
Often I feel that learning a new language is more like learning a local dialect or slang than a truly new language. Some languages are very different, but I'd wager that if you're looking to learn swift you've probably worked with another very similar language before.
Sure there'll be some stumbling blocks, but you can get to a point of "this works, but probably isn't the best or fastest way for this language" fairly quickly by trying things and copy-pasting errors into google.
> If you need to learn something that might not be permanently useful: so what?
Indeed, and unless it's a really poor language you'll probably take something useful away from it. Maybe it'll be a language-feature that saves a lot of boilerplate that makes you wonder if you can implement in your own favourite language. Maybe it'll be an awesome package manager or module structure. Maybe it'll just be fun or make you think more about how different approaches work for different situations.
It is still in Beta and still in flux at the moment (language not just implementation).
Plenty of people write software for Windows using .NET, which happens to be the main fashionable system to use on Windows, and isn't typically popular on Mac OSX. But this does not make .NET rubbish - it just happens to be designed for Windows and isn't natively available on Mac OSX from Apple. Does this make .NET and associated languages "bad" or "not worth learning"?
Just because Mono is available on other platforms thanks to the huge effort from the community does not necessarily mean it would be a good choice to use for a cross-platform product, as the real journey and path of the platform is still in the hands of Microsoft. This is the same as Java used to be. But it didn't stop people writing plenty of software in Java, thanks to the main platforms supported by the Java VM. Did this make Java "not worth learning"?
I suppose Apple doesn't really need to care about making a language for other platforms. From the perspective of developers on Apple platforms, the need for a cross-platform language/system would seem redundant. As other posters have mentioned, the niche Objective-C language has found plenty of developers, and that's typically available on Apple devices (unless you count GNUstep). Does this make Objective-C "not worth learning"?
And remember that just because Swift is on one platform doesn't mean you CAN'T do cool things with it. It just means that you can only do them on one platform. That is in Apple's best interests. Does it really need to be available on every platform to be usable?
For example, they don't serve pizza at my local Chinese takeaway. This doesn't stop the food there from being great. And it doesn't make pizza less delicious when I buy it from elsewhere. But I'd be foolish to complain about the lack of pizza from the Chinese takeaway and refuse to eat the lovely Chinese food they serve there. Chinese food and pizza are both delicious, and they're only available from different places, but that doesn't diminish their taste.
I suppose the witty solution to the problem you face is to just learn C or C++ and do cross-platform stuff with that.
First of, Microsoft does support the development of .NET and associated components. It is definitely not an active support relationship, but MS answers the questions Mono developers have and has provided some help for the Moonlight project. Furthermore, it seems Microsoft is making an effort to make ASP.NET on Linux more attractive.
Having said that, it doesn't even matter what Microsoft does with .NET. If Swift stays 'closed' as it is, you can use it to develop Mac and iOS applications. If .NET stays 'closed' as it is, you can use your .NET experience to develop Windows desktop applications, 'Windows Store' applications, web applications and services, client side web programming, Windows Phone apps, apps for iOS and Android with Xamarin, Linux desktop applications, and even operating system development or protocol verification if you're an adventurous academic. All of these things are being done right now by people, and good tools exist for those things. I realize that people on HN don't like Microsoft's lock-in or tools, but experience with .NET does give you access to a very diverse set of areas to program in.
Now I'm quite convinced that Apple will open source Swift (they appear to have informally confirmed they'll be doing exactly that [1]). And then its basis on LLVM will make sure that it can be used in other places as well. But I doubt Swift's uptake outside of Apple apps will be bigger than Objective-C's simply because, unlike Microsoft, Apple won't use or promote Swift anywhere for anything else than Apple apps.
The point is that 'openness' of a language itself does not matter much for the value to learn it. It depends on how much you can do with the language. Even if you assume "You can never use Swift outside of Apple's context" and "You can never use .NET outside of Microsoft's context" are both true (which they are not), Microsoft's context for .NET is much broader than Apple's is for Swift.
[1]: https://twitter.com/mxweas/status/474581160454942721
[2]: Of course one can argue that developing Mac+iOS applications itself presents more value than all of the .NET things I mentioned combined. But that was not the point of this discussion.
I don't mean to be argumentative, but the Roslyn compiler is open source right? I'm genuinely curious.
Microsoft's context for .NET is only broader due to community effort and NOT due to Microsoft's active help. When .NET first came out, was it as widely usable on all those platforms and for different types of applications? No, and that's exactly the position that Swift is in right now. In a few years time, there might be a community effort for Swift on different platforms, but look at the success of GNUstep and the libraries surrounding it; there is not wide adoption by any means yet Obj-C remains popular.
A large portion of the list of applications that you mention are typically Windows platforms - Windows desktop applications, Windows Store applications, web applications on Windows servers, Windows phone apps. Replace the word "Windows" with Apple or iOS and you get the complaint that the parent mentioned. It's entirely a point of view problem, ie you don't get iOS/Mac OSX developers complaining about new language features in T-SQL when SQL Server is not available for iOS/Mac.
I suppose the same complaints were made against .NET all those years ago - "why bother learning it? I can use the libraries and languages I already know!". It is a poor complaint to make really, as the effectiveness of a language or library does not depend on it being open source, eg. Java (years ago), the Win32 API, MFC, Carbon, Cocoa, C++ (does the committee steer itself based on our suggestions we just throw at them?). Their success and use has happened on closed-source platforms and with closed-source devices, but it's entirely irrelevant in the same way that adoption of an open-source language is, surely?
It would be interesting if Apple does open source Swift, but as you say they won't promote Swift outside Apple apps (in the same way that I can't see that much marketing material from Microsoft encouraging us to use Mono on Linux; ie, Microsoft doesn't promote .NET use outside Windows platforms either). But that doesn't stop an army of C# developers existing. It would be interesting to know how many of the C# developers use that language because it is available on multiple platforms (perhaps we could have a poll?). I would think that very very few developers are using because they know it is cross-platform to some extent ("I'm going to use C# and .NET for my Active Directory MMC snap-in page because I can attempt to compile it on another platform!"); in fact, C# and .NET jobs mention Windows development 98.9% of the time don't they?
I just thought that refusing to even take a look at a language due to it not being open-soured was a bit of a foolish thing to do or complain about, and to be upset that a language (designed by a company for its own operating systems and own devices) was not available on other platforms and OSes was a bit of an odd complaint to make too!
EDIT: I have reread this and it sounds quite harsh! I don't mean it to sound harsh. I did not know that Microsoft has opened up the .NET system a bit; I was more attempting to highlight that the original parent's comments was a bit whiney for no reason, and I wasn't meaning to pick a quarrel with you btw. Apologies!
You're most likely going to be gluing API calls together and that's where you'll spend 80% of your time: Learning APIs. Even then this is more likely looking things up in documentation or googling for answers on StackOverflow. Whether you glue them with Python, Ruby, Objective-C, Java, Swift, etc. it really doesn't matter.
If a new programming language is your only gripe then you have a way bigger problem on your hands when it comes to writing applications :)
I suspect Peter Norvig would disagree with you there -- http://norvig.com/21-days.html
> You're most likely going to be gluing API calls together and that's where you'll spend 80% of your time
For certain problems this is the case, and you can get away with writing Python/Ruby/etc in Swift syntax.
For other problems it isn't the case. Choice of language does matter; if it didn't, would Apple have invented Swift in the first place?
At least in parts of his essay, Norvig is talking about learning a new language when one already knows how to program. For example, where he says:
In 3 days you might be able to learn some of the syntax of C++ (if you already know another language), but you couldn't learn much about how to use the language. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using C++ syntax, but you couldn't learn what C++ is actually good (and bad) for.
I think that rather depends on the language and your past experience. Most programmers with experience in mainstream languages will indeed require a substantial investment of time to learn a radically different language like Haskell.
But swift isn't radically different paradigm shift like switching to a purely functional language like Haskell from a life spent writting c++.
I think your confusing learning functional programming with learning a "functional programming language." The "functional" part takes longer then the "programming lanague" part.
I'm sure that swift is of great interest to people who need to write iOS apps, and who like to use modern languages.
The article mentions that Swift wasn't tested by building a nontrivial application prior to release. It's worth mentioning that Java was tested this way: Sun built HotJava.
Things have probably changed significantly from then, but I do remember it being slow. Compared to today's generation who get frustrated when a webpage doesn't appear within about 3 seconds, they would lose their mind if they were transported back to 1995 (with the general speed of everything being slower).