Wonderful opinionated book on C#


R

RayLopez99

I am reading a great beginners book on C#, translated into English from Bulgarian, and it's opinionated which makes it a great read. See excerpt below.


RL

Why Not C or C++?
Although this is also debatable, the C and C++ languages are considered rather primitive, old and decaying. They still have their uses and are suitable for low-level programming (e.g. programming for specialized hardware devices), but we do not advise you to pursue them.
You can program in pure C, if you have to write an operating system, a hardware device driver or if you want to program an embedded device, because ofthe lack of alternatives and the need to control the hardware very carefully. The C language is morally old and in no way do we advise you to begin programming with it. A programmer’s productivity under pure C is many times lower compared to their productivity under modern general-purpose programming languages like C# and Java. A variant of C is used among Apple / iPhone developers, but not because it is a good language, but because there is no decent alternative. Most Apple-oriented programmers do not like Objective-C, but they have no choice in writing in something else.
C++ is acceptable when you have to program applications that require very close work with the hardware or that have special performance requirements (like 3D games). For all other purposes (like web applications development or business software) C++ is phenomenally inadequate. We do not advise you to pursue it, if you are starting with programming just now. The reason it is still being studied in some schools and universities is hereditary, because these institutions are very conservative. For example, the InternationalOlympiad in Informatics (IOI) continues to promote C++ as the only language permitted to use at programming contests, although C++ is rarely used in the industry. If you don’t believe this, look through some job search site and count the percentage of job advertisements with C++.
The C++ language lost its popularity mainly because of the inability to quickly write quality software with it. In order to write high-quality software in C++, you have to be an incredibly smart and experienced programmer, whereas the same is not strictly required for C# and Java. Learning C++ takesmuch more time and very few programmers know it really well. The productivity of C++ programmers is many times lower than C#’s and that is why C++ is losing ground. Because of all these reasons, the C++ language is slowly fading away and therefore we do not advise you to learn it.

FUNDAMENTALS OF COMPUTER PROGRAMMING WITH C#
(The Bulgarian C# Programming Book)
Svetlin Nakov & Co.
 
Ad

Advertisements

A

Anton Shepelev

RayLopez99:
The reason it is still being studied in some
schools and universities is hereditary, because
these institutions are very conservative.
[...]
In order to write high-quality software in C++,
you have to be an incredibly smart and experienced
programmer, whereas the same is not strictly re-
quired for C# and Java.

C# and Java not only hide the pointer trickerations
but also support fundamental data structures and al-
gorhythms in their system libraries, sparing the
programmer learning them. These languages are ut-
terly unfit for educational purposes:

http://preview.tinyurl.com/9ewrh
 
A

Arne Vajhøj

I am reading a great beginners book on C#, translated into English
from Bulgarian, and it's opinionated which makes it a great read.
See excerpt below.
Why Not C or C++? Although this is also debatable, the C and C++
languages are considered rather primitive, old and decaying. They
still have their uses and are suitable for low-level programming
(e.g. programming for specialized hardware devices), but we do not
advise you to pursue them. You can program in pure C, if you have to
write an operating system, a hardware device driver or if you want to
program an embedded device, because of the lack of alternatives and
the need to control the hardware very carefully. The C language is
morally old and in no way do we advise you to begin programming with
it. A programmer’s productivity under pure C is many times lower
compared to their productivity under modern general-purpose
programming languages like C# and Java. A variant of C is used among
Apple / iPhone developers, but not because it is a good language, but
because there is no decent alternative. Most Apple-oriented
programmers do not like Objective-C, but they have no choice in
writing in something else. C++ is acceptable when you have to program
applications that require very close work with the hardware or that
have special performance requirements (like 3D games). For all other
purposes (like web applications development or business software) C++
is phenomenally inadequate. We do not advise you to pursue it, if you
are starting with programming just now. The reason it is still being
studied in some schools and universities is hereditary, because these
institutions are very conservative. For example, the International
Olympiad in Informatics (IOI) continues to promote C++ as the only
language permitted to use at programming contests, although C++ is
rarely used in the industry. If you don’t believe this, look through
some job search site and count the percentage of job advertisements
with C++. The C++ language lost its popularity mainly because of the
inability to quickly write quality software with it. In order to
write high-quality software in C++, you have to be an incredibly
smart and experienced programmer, whereas the same is not strictly
required for C# and Java. Learning C++ takes much more time and very
few programmers know it really well. The productivity of C++
programmers is many times lower than C#’s and that is why C++ is
losing ground. Because of all these reasons, the C++ language is
slowly fading away and therefore we do not advise you to learn it.

FUNDAMENTALS OF COMPUTER PROGRAMMING WITH C# (The Bulgarian C#
Programming Book) Svetlin Nakov & Co.

The wording is not very professional/technical and I would not
trust other recommendations from that author.

Regarding the claims then I will quote an old joke "It contains
many new and good things, but the new things are not good and the
good things are not new".

:)

It is correct but not new that C and C++ are not used much for:
- web apps
- business apps
- smartphone apps (objective-C is not C)

But they are still widely used and dominant for:
- operating systems (Windows, Linux, various Unix, MacOS X etc.)
- database servers (Oracle, DB2, SQLServer, MySQL etc.)
- web server (Apache, IIS)
- VM's (.NET CLR and all common Java JVM's are C/C++)
- office packages (MS Office and most of OpenOffice/LibreOffice are C/C++)
- real time systems

Number of Java and C# jobs are probably bigger than the number
of C and C++ jobs today, but there are still a healthy demand
for C and C++ expertise out there.

Arne
 
A

Arne Vajhøj

RayLopez99:
The reason it is still being studied in some
schools and universities is hereditary, because
these institutions are very conservative.
[...]
In order to write high-quality software in C++,
you have to be an incredibly smart and experienced
programmer, whereas the same is not strictly re-
quired for C# and Java.

C# and Java not only hide the pointer trickerations
but also support fundamental data structures and al-
gorhythms in their system libraries, sparing the
programmer learning them. These languages are ut-
terly unfit for educational purposes:

http://preview.tinyurl.com/9ewrh

The assumption is false: that you can not do basic
data structures in Java (or C#) - you can.

And the logic is false: sure we can make the average
CS graduate better by forcing them to use more difficult
to use tools, but it does not help companies. Instead
of 10000 great developers and 30000 mediocre developers,
then they will only get 10000 great developers.

Arne
 
A

Anton Shepelev

Arne Vajhoj to Anton Shepelev:
The assumption is false: that you can not do basic
data structures in Java (or C#) -- you can.

I did not assume that.
And the logic is false: sure we can make the aver-
age CS graduate better by forcing them to use more
difficult to use tools, but it does not help com-
panies. Instead of 10000 great developers and
30000 mediocre developers, then they will only get
10000 great developers.

It does not have to do with great vs. mediocre de-
velopers, but rather with natural vs. unnatural ways
of learning. Learning programming from the basics
is preferable to starting from the high-level with-
out ever understanding of what's going on below.
The latter is like building without a foundation.
 
J

Jeff Johnson

It does not have to do with great vs. mediocre de-
velopers, but rather with natural vs. unnatural ways
of learning. Learning programming from the basics
is preferable to starting from the high-level with-
out ever understanding of what's going on below.
The latter is like building without a foundation.

I'm familiar with low-level programming and I have to say that in the 8 or
so years that I've been using C# heavily, I have yet to come across a
situation where knowledge of pointers (or assembly lanugage, etc.) would
have helped me solve a problem.

There's a stratification in the industry now. Some people just need to know
how to use modern tools and frameworks and they can build some pretty
powerful stuff.
 
Ad

Advertisements

A

Anton Shepelev

Jeff Johnson to Anton Shepelev:
It does not have to do with great vs. mediocre
developers, but rather with natural vs. unnatu-
ral ways of learning. Learning programming from
the basics is preferable to starting from the
high-level without ever understanding of what's
going on below. The latter is like building
without a foundation.

I'm familiar with low-level programming[...]

That's the key point!
[...]and I have to say that in the 8 or so years
that I've been using C# heavily, I have yet to
come across a situation where knowledge of point-
ers (or assembly lanugage, etc.) would have helped
me solve a problem.

There's a stratification in the industry now. Some
people just need to know how to use modern tools
and frameworks and they can build some pretty pow-
erful stuff.

It is quilte all right to learn data structures as a
pure mathematical abstraction, to which high-level
lagnuages are indeed closer, but one who starts with
such a language rarely ever has to learn the funda-
mental structures & algorhythms, which is a problem
with using it in education.
 
A

Arne Vajhøj

I'm familiar with low-level programming and I have to say that in the 8 or
so years that I've been using C# heavily, I have yet to come across a
situation where knowledge of pointers (or assembly lanugage, etc.) would
have helped me solve a problem.

I am pretty sure that the knowledge about pointers helped you.

Or did you use all value types?

:)

References are really pointers. There are significant differences with
C pointers, but Pascal pointers are not that different.
There's a stratification in the industry now. Some people just need to know
how to use modern tools and frameworks and they can build some pretty
powerful stuff.

I truly believe that a solid background do make programmers better.

Arne
 
A

Arne Vajhøj

Jeff Johnson to Anton Shepelev:
It does not have to do with great vs. mediocre
developers, but rather with natural vs. unnatu-
ral ways of learning. Learning programming from
the basics is preferable to starting from the
high-level without ever understanding of what's
going on below. The latter is like building
without a foundation.

I'm familiar with low-level programming[...]

That's the key point!
[...]and I have to say that in the 8 or so years
that I've been using C# heavily, I have yet to
come across a situation where knowledge of point-
ers (or assembly lanugage, etc.) would have helped
me solve a problem.

There's a stratification in the industry now. Some
people just need to know how to use modern tools
and frameworks and they can build some pretty pow-
erful stuff.

It is quilte all right to learn data structures as a
pure mathematical abstraction, to which high-level
lagnuages are indeed closer, but one who starts with
such a language rarely ever has to learn the funda-
mental structures & algorhythms, which is a problem
with using it in education.

You can learn basic data structures in C# or Java.

If that is not part of what students learn, then blame
the school/teacher not the language.

Arne
 
A

Arne Vajhøj

Arne Vajhoj to Anton Shepelev:

I did not assume that.

But then the entire argument against Java and C#
fall apart.
It does not have to do with great vs. mediocre de-
velopers,

That was what the link you provided discussed.
but rather with natural vs. unnatural ways
of learning. Learning programming from the basics
is preferable to starting from the high-level with-
out ever understanding of what's going on below.
The latter is like building without a foundation.

I don't think that is true.

People are not machines.

It is very important that people learning find the topic
interesting and have a feeling of making progress.

So learning:
1) electronics
2) assembler
3) C
4) Pascal/Modula-2/Ada83
5) Java/C#
would loose most.

So you need to start with a language that will give them a feeling
of programming and then later make some deep dives.

Arne
 
A

Arne Vajhøj

But then the entire argument against Java and C#
fall apart.


That was what the link you provided discussed.


I don't think that is true.

People are not machines.

It is very important that people learning find the topic
interesting and have a feeling of making progress.

So learning:
1) electronics
2) assembler
3) C
4) Pascal/Modula-2/Ada83
5) Java/C#
would loose most.

So you need to start with a language that will give them a feeling
of programming and then later make some deep dives.

BTW, there is a very similar question: should one start with a simple
or complex language.

I believe in starting with a simple language, so I would not necessarily
recommend starting with Java or C#. Starting with good old Pascal or
maybe Python may learn people the basics, before they get into
more complex languages with even more complex libraries like
Java and C#.

Arne
 
Ad

Advertisements

R

RayLopez99

BTW, there is a very similar question: should one start with a simple

or complex language.



I believe in starting with a simple language, so I would not necessarily

recommend starting with Java or C#. Starting with good old Pascal or

maybe Python may learn people the basics, before they get into

more complex languages with even more complex libraries like

Java and C#.



Arne

I started with FORTRAN, punched cards! Then Pascal. Then C. Then C++. Then C#. Look where it got me: self-made millionaire, handsome, nice manners, and I'm not a professional programmer. So you are right Arne. Hungary rules!

I want to ask you about MEF / Inversion of Control / Dependency Injection but I'll do so in another thread.

RL
 
A

Anton Shepelev

Arne Vajhoj:
References are really pointers.

I disagree. Passing parameters by reference is an
abstraction, that can exist as part of a high-level
programming langugage independent of the implementa-
tion. Did Ada Lovelace not develop a programming
language for a non-existing machine?
There are significant differences with C pointers,
but Pascal pointers are not that different.

What's the difference between Pascal and C pointers?
 
J

Jeff Johnson

I am pretty sure that the knowledge about pointers helped you.

Or did you use all value types?

:)

References are really pointers. There are significant differences with
C pointers, but Pascal pointers are not that different.

You've lost me here. The fact that these things are implemented as pointers
behind the scenes has no bearing on whether I need to UNDERSTAND pointers.
And that's the point (HAR!) I'm trying to make: I just work with objects as
objects. At no point (I really should stop!) do I need to do *myObject or
&myObject or myObject->xxx or whatever.

I DO know about pointers. But I have not had to draw on that knowledge for
any of the C# programming I have done. (Okay, I must admit that that's not
100% true. Once, for a personal project, I was manipulating bitmaps, and I
used an unsafe block to work directly with the image bytes in memory.
However, I later found out I could "freeze" that memory with some Framework
method and deal with those bytes as a byte array. I changed the old
pointer-based code to pure managed code and went on my way.)
 
A

Arne Vajhøj

Arne Vajhoj:


I disagree. Passing parameters by reference is an
abstraction, that can exist as part of a high-level
programming langugage independent of the implementa-
tion.

Yes.

But is that relevant?

References and pass by reference are two different things.

In fact passing references by values is by far the most
common in C#.
What's the difference between Pascal and C pointers?

What you can do to them.

Pascal pointers are rather type safe.

Arne
 
Ad

Advertisements

A

Arne Vajhøj

You've lost me here. The fact that these things are implemented as pointers
behind the scenes has no bearing on whether I need to UNDERSTAND pointers.
And that's the point (HAR!) I'm trying to make: I just work with objects as
objects. At no point (I really should stop!) do I need to do *myObject or
&myObject or myObject->xxx or whatever.

I DO know about pointers. But I have not had to draw on that knowledge for
any of the C# programming I have done. (Okay, I must admit that that's not
100% true. Once, for a personal project, I was manipulating bitmaps, and I
used an unsafe block to work directly with the image bytes in memory.
However, I later found out I could "freeze" that memory with some Framework
method and deal with those bytes as a byte array. I changed the old
pointer-based code to pure managed code and went on my way.)

I think you are talking about C style pointers not pointers
in general here.

C# references are a type of pointers.

Pascal pointers are very similar to C# references.

C# references are very similar to Java references and the Java Language
Spec openly use the term pointer to describe how they work.

Arne
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top