Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What was it like to learn C#? #1320

Closed
ErikSchierboom opened this issue Oct 3, 2019 · 5 comments
Closed

What was it like to learn C#? #1320

ErikSchierboom opened this issue Oct 3, 2019 · 5 comments
Assignees

Comments

@ErikSchierboom
Copy link
Member

We’ve recently started a project to find the best way to design our tracks, in order to optimize the learning experience of students.

As a first step, we’ll be examining the ways in which languages are unique and the ways in which they are similar. For this, we’d really like to use the knowledge of everyone involved in the Exercism community (students, mentors, maintainers) to answer the following questions:

  1. How was your experience learning C#? What was helpful while learning C#? What did you struggle with? How did you tackle problems?
  2. In what ways did C# differ from other languages you knew at the time? What was hard to learn? What did you have to unlearn? What syntax did you have to remap? What concepts carried over nicely?

Could you spare 5 minutes to help us by answering these questions? It would greatly help us improve the experience students have learning C# :)

Note: this issue is not meant as a discussion, just as a place for people to post their own, personal experiences.

Want to keep your thoughts private but still help? Feel free to email me at erik@exercism.io

Thank you!

@ErikSchierboom ErikSchierboom changed the title Tell us what it was like to learn $LANG Tell us what it was like to learn C# Oct 3, 2019
@ErikSchierboom ErikSchierboom changed the title Tell us what it was like to learn C# What was it like to learn C#? Oct 3, 2019
@ErikSchierboom
Copy link
Member Author

How was your experience learning C#?

I started learning C# from the very beginning, with C# 1.0. Having had some experience with Java and C++ at school, C# was mostly familiar grounds (C# was arguably just a copy of Java at the time). In other words, C# had familiar syntax and semantics and few unique features. Those things I hadn't yet encountered (properties and events) were relatively easy to understand and quite practical. All these things combined made it easy to learn C#. Learning C# was also made easy by its excellent compiler. The error messages it output were miles and miles ahead of what I was used to with C++, as most of the messages would simply state what I had to do to fix the issue.

Another thing C# had going for it was its IDE: Visual Studio. At the time, I considered Visual Studio to be the best IDE there was, which was incredibly helpful learning C#. It had a very nice code completion feature, which meant I could explore the different API's just by using pressing the dot key every once in a while (note: this is more about getting the know the platform, not the language itself).

I feel like it was mainly an advantage to learn C# when it was still on its first iteration, as C# is now a far more complex language which means that it is also harder to learn now. Even more, there are things in C# that are rarely used or have been superseded by later features, which can make it hard to learn what the correct way is.

In what ways did C# differ from other languages you knew at the time?

As said, C# didn't differ much from Java, so I'd say it was mostly similar. The addition of properties (syntactic sugar for a getter-setter combination) was a nice surpise to me.

What was hard to learn?

For the first few versions, I don't think there was anything particularly difficult to learn. With the later versions (7.X), more advanced, fairly low-level features were added which took a bit of time to learn.

What concepts carried over nicely?

Almost all of the concepts of Java: blocks, statements, classes, almost every C# concept had a direct Java counterpart.

What did you struggle with?

Early on, I mostly struggled with general programming things, like how to structure my application code (I was still a student back then). With the later C# versions, several relatively specific, low-level features were introduces (like ref structs), which I struggled a bit trying to understand them at first. Having understood them, I then struggled to find use cases in which I should be using them.

What did you have to unlearn?

Nothing really.

What syntax did you have to remap?

I don't think there was any syntax to remap. This was due mostly due to C# being a copy of Java (and knowing Java), it having not that much syntax at the time and me only having experience in a few languages (C, C++ and Java).

What was helpful while learning C#?

At the time (early 2000s), there was not that much content to be found on the internet. That was why I learned mostly by using books (C# Unleashed). Most of my learning was reading things in my book, and then trying to apply them to little toy projects. The documentation was also helpful.

How did you tackle problems?

At the time of C# 1, there were few resources available, so it was mainly trial and error then. Later on, the online documentation improved quite a bit so that helped. The biggest productivity boost was the arrival of StackOverflow. Nowadays, there are tons of resources to use (docs, blogs, videos), it becomes almost hard to choose which resource to use :)

@NobbZ
Copy link
Member

NobbZ commented Nov 1, 2019

How was your experience learning C#? What was helpful while learning C#? What did you struggle with? How did you tackle problems?

Learning C# back then was pretty easy for me, it was very similar to other OOP languages I knew at that time, and I was pretty much able to follow the "C# is the better Java" you heard everywhere back then.

The big problem that arose for me that time (it was around dotNet/C# 3.0 to 3.5) was that you were pretty much lost with the toolchain, when you wasn't able to stay up to date, while at the same time, libraries did not get updated fast enough. I'm not sure if this was a problem of the time, or a problem that still is there, but also I have to say, that when I refreshed C# through exercism and with the new dotnet CLI toolchain, things where much more smooth than 10ish years ago.

Also another very big problem for me was LINQ (which I liked by the idea), because I was not able to wrap my heads around the anonymous functions that have been used there massively. Understanding whats going on there happened only years later when learning Haskell at the university, and I learnt to know and love passing around and using passed around functions.

In what ways did C# differ from other languages you knew at the time? What was hard to learn? What did you have to unlearn? What syntax did you have to remap? What concepts carried over nicely?

Sadly I do not remember much from that time. I know, I also did some Java by that time, and I prefered in C# that it "felt" better, but still I used Java more often, as it wasn't as locked into MicroSoft as C# was…

@MarkusReynolds1989
Copy link

How was your experience learning C#?
Learning C# was like a dream come true. I started learning Java back in 2009 while I was in college for an associates degree program for IT. We didn't use an IDE, we were told to use notepad and compile through the command line. Obviously I was very confused about how anything worked and I was having a tough time. Recently having finally finished college I got to work with C# and visual studio which was much much easier.
What was helpful while learning C#?
The most helpful thing while learning C# vs other languages is visual studio and just the simplicity of the language. It gives you a lot of shortcuts and takes away a lot of the boilerplate so you can focus on learning.
What did you struggle with?
My biggest struggle was understanding objects and how you call them from classes. I understood top down procedural coding but harnessing the power of classes didn't come naturally. That as well as scope levels.
How did you tackle problems?
I actually read a few C# programming books as well as tutorials and then just putting in the time to grind out the things that confused me.
In what ways did C# differ from other languages you knew at the time?
The biggest difference between C# and other languages was LINQ and higher order functions, this is a game changer that makes it much easier to code and much faster.
What was hard to learn?
Object oriented programming.
What did you have to unlearn?
I had to unlearn the more procedural mindset. I really wanted to make everything an array and a for next loop but you have to understand the overhead of boxing and primitives and how the garbage collector works to make sure you aren't adding more work than you need.
What syntax did you have to remap?
The additions of Lambda and LINQ made me reconsider how to write syntax.
What concepts carried over nicely?
Procedural programming can work in C# so you at least have a basis. There's also the C style syntax that C++ and C programmers as well as Java programmers can pick up quickly.

@saurabh896
Copy link

saurabh896 commented May 7, 2020

How was your experience learning C#? What was helpful while learning C#? What did you struggle with? How did you tackle problems?

I learned C# when I was in my graduation. I started with all basics like the thing which I programmed in C and C++ while back..
I used same things like a palindrome , divisible by 2 or not like the program.
Then pattern stuff.
. C# was helpful cause a lot of python basic theory stuff made much more sense in new language learning.

What did you struggle with?

I struggle lot with enum and other arrays related stuff cause that time there was not that much use cases were present.

How did you tackle problems?

Automating stuff. I know it is a boring way. But it makes a lot more sense when I am automating stuff with c# like sending emails. That makes language more fun to me.

In what ways did C# differ fsrom other languages you knew at the time?

C# was new. It was everywhere. Gave tough competition to JAVA.

What did you have to unlearn?

I would say Java syntax. A lot of syntax is common. I accidentally wrote Java code to C# program

What syntax did you have to remap? What concepts carried over nicely?

A lot of OOP concepts. Comes in handy..

ErikSchierboom added a commit to ErikSchierboom/csharp that referenced this issue Jan 15, 2021
[Docs] Cross-reference concept exercise file information
ErikSchierboom added a commit to ErikSchierboom/csharp that referenced this issue Jan 21, 2021
[Docs] Cross-reference concept exercise file information
ErikSchierboom added a commit to ErikSchierboom/csharp that referenced this issue Jan 26, 2021
[Docs] Cross-reference concept exercise file information
ErikSchierboom added a commit to ErikSchierboom/csharp that referenced this issue Jan 27, 2021
[Docs] Cross-reference concept exercise file information
ErikSchierboom added a commit to ErikSchierboom/csharp that referenced this issue Jan 28, 2021
[Docs] Cross-reference concept exercise file information
@ErikSchierboom
Copy link
Member Author

We're closing this issue as it was part of our research for the v3 version of Exercism which has just been released.

Thanks everyone for chipping in! It has been greatly appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants