473,403 Members | 2,270 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,403 software developers and data experts.

How to improve C skill?

Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way? If so, what type of codes are suitable for novice? The
ones in fsf freed software directory? I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Thanks in advance.

May 10 '07 #1
16 3038
we********@gmail.com wrote:
Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice?
Plenty!
Is reading others' codes
the best way? If so, what type of codes are suitable for novice?
Code in this context is singular ("code" rather than "codes"). Just
reading code probably isn't a good idea. Reading source to see how
something you know works is more effective.

Try the exercises in K&R, there have been plenty of solutions posted
here to look through if you get stuck.
I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Start simple!

--
Ian Collins.
May 10 '07 #2

<we********@gmail.comwrote in message
news:11*********************@o5g2000hsb.googlegrou ps.com...
Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way? If so, what type of codes are suitable for novice? The
ones in fsf freed software directory? I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Thanks in advance.
Try writing "asteroids".
This is a game in which you manoevre a spacship between lines of asterisks,
which scroll down the console. You will need curses / conio or other
non-standard header to treat the console correctly.
It is very easy to write and will give you a sense of achievement. It you
put in levels and scores you can make quite a sophisticated game.
Start by making sure you can use your console library to position characters
at will.
--
Free games and programming goodies.
http://www.personal.leeds.ac.uk/~bgy1mm

May 10 '07 #3
we********@gmail.com said:
Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way?
Crank up the warning level of your compiler as high as it will go, and
write lots and lots of programs. Remember that much of what your
tutorials taught you is likely to be wrong. Most C tutorials are
written by people who don't know C. Come to think of it, so is most C
code. So, whilst "reading others' code" can be helpful, get into the
habit of thinking "why is this code bad? What don't I like about it?
What diagnostic messages does it cause my compiler to emit? Do I
understand those messages? What don't I understand about the code
itself? *WHY* is the author doing such-and-such?"
I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent.
Honesty will get you everywhere! :-) Seriously, true competence (in
*any* field worth pursuing) takes about ten years of diligent study and
*practice*. Ten years to be a competent doctor, lawyer, programmer,
whatever.

Devise a project of your very own - e.g. a simple text processor - and
define N things you'd like it to do (where N is initially at least 4).
Implement those features, one at a time, learning all about diagnostic
messages as you go! When you've implemented all N features, think up
another N/4 features (rounded down), and notice how awkward it is to
fit them in. Re-factor the code to make adding the new features much
more pleasant, and now you're starting to learn about programming. Once
all 5N/4 features are implemented, let N = 5N/4 and go round again,
until you start to hit practical limits. This is feature creep with a
vengeance! But it will introduce you gently to large programs.
What should I do?
Write C programs.

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at the above domain, - www.
May 10 '07 #4
On 9 May 2007 19:57:02 -0700, "we********@gmail.com"
<we********@gmail.comwrote:
>Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way? If so, what type of codes are suitable for novice? The
ones in fsf freed software directory? I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Thanks in advance.
Buy the book "C Programming FAQs: Frequently Asked Questions", and
read it cover to cover. This book is written by Steve Summit, who
wrote the FAQ for this newsgroup. The book is available on amazon.com:

http://www.amazon.com/Programming-FA.../dp/0201845199

Additionally, continue to read this newsgroup. There are some really
sharp people who post here, and if you lurk around here for a
reasonable amount of time, you should be able to determine who these
people are, and learn a lot from them.

Also, get yourself a cheap PC ($100 U.S.) at a garage sell or on your
local classifieds and install a free Linux distribution like Ubuntu:

http://www.ubuntu.com/

Linux distributions will provide you with the gcc compiler, which is
arguably one of the best available, free or not. Just make sure to
write a lot of programs and crank up the compiler warning level. For
example, with gcc, this is a good start:

gcc -Wall -W -ansi -pedantic

Finally, if you have any questions about standard C, don't hesitate to
ask in this newsgroup.

Best regards
--
jay
May 10 '07 #5
jaysome wrote:
On 9 May 2007 19:57:02 -0700, "we********@gmail.com"
<we********@gmail.comwrote:
>Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way? If so, what type of codes are suitable for novice? The
ones in fsf freed software directory? I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Thanks in advance.

Buy the book "C Programming FAQs: Frequently Asked Questions", and
read it cover to cover. This book is written by Steve Summit, who
wrote the FAQ for this newsgroup. The book is available on amazon.com:

http://www.amazon.com/Programming-FA.../dp/0201845199

Additionally, continue to read this newsgroup. There are some really
sharp people who post here, and if you lurk around here for a
reasonable amount of time, you should be able to determine who these
people are, and learn a lot from them.

Also, get yourself a cheap PC ($100 U.S.) at a garage sell or on your
local classifieds and install a free Linux distribution like Ubuntu:

http://www.ubuntu.com/

Linux distributions will provide you with the gcc compiler, which is
arguably one of the best available, free or not. Just make sure to
write a lot of programs and crank up the compiler warning level. For
example, with gcc, this is a good start:

gcc -Wall -W -ansi -pedantic
Since beginners are often satisfied when the compilation ends without
errors but with many warnings, I would add -Werror ;-)

a+, ld.
May 10 '07 #6
jaysome wrote:
On 9 May 2007 19:57:02 -0700, "we********@gmail.com"
<we********@gmail.comwrote:
>Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way? If so, what type of codes are suitable for novice? The
ones in fsf freed software directory? I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Thanks in advance.

Buy the book "C Programming FAQs: Frequently Asked Questions", and
read it cover to cover. This book is written by Steve Summit, who
wrote the FAQ for this newsgroup. The book is available on amazon.com:

http://www.amazon.com/Programming-FA.../dp/0201845199

Additionally, continue to read this newsgroup. There are some really
sharp people who post here, and if you lurk around here for a
reasonable amount of time, you should be able to determine who these
people are, and learn a lot from them.

Also, get yourself a cheap PC ($100 U.S.) at a garage sell or on your
local classifieds and install a free Linux distribution like Ubuntu:

http://www.ubuntu.com/

Linux distributions will provide you with the gcc compiler, which is
arguably one of the best available, free or not. Just make sure to
write a lot of programs and crank up the compiler warning level. For
example, with gcc, this is a good start:

gcc -Wall -W -ansi -pedantic
Why would you use -ansi instead of -c99?
>
Finally, if you have any questions about standard C, don't hesitate to
ask in this newsgroup.

Best regards

--
Pietro Cerutti

PGP Public Key ID:
http://gahr.ch/pgp
May 10 '07 #7
Pietro Cerutti said:
jaysome wrote:
<snip>
>Just make sure to
write a lot of programs and crank up the compiler warning level. For
example, with gcc, this is a good start:

gcc -Wall -W -ansi -pedantic
Why would you use -ansi instead of -c99?
Most compilers don't conform to C99 (including gcc, despite the switch).

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at the above domain, - www.
May 10 '07 #8
Richard Heathfield wrote:
Pietro Cerutti said:
>jaysome wrote:

<snip>
>>Just make sure to
write a lot of programs and crank up the compiler warning level. For
example, with gcc, this is a good start:

gcc -Wall -W -ansi -pedantic
Why would you use -ansi instead of -c99?

Most compilers don't conform to C99 (including gcc, despite the switch).
Yes, I know. But still, I don't see the point to completely avoid C99
features just because some of them are not implemented (yet).
The "Status of C99 features in GCC" [1] explicitly says what you can use
safely and what you can't.
So why not start using the useful features which we have at disposal
now, and wait for the remaining ones to come, instead of just snobbing
the whole C99 set of changes?

[1] http://gcc.gnu.org/c99status.html

--
Pietro Cerutti

PGP Public Key ID:
http://gahr.ch/pgp
May 10 '07 #9
Pietro Cerutti said:
Richard Heathfield wrote:
>Pietro Cerutti said:
>>jaysome wrote:

<snip>
>>>Just make sure to
write a lot of programs and crank up the compiler warning level.
For example, with gcc, this is a good start:

gcc -Wall -W -ansi -pedantic
Why would you use -ansi instead of -c99?

Most compilers don't conform to C99 (including gcc, despite the
switch).

Yes, I know. But still, I don't see the point to completely avoid C99
features just because some of them are not implemented (yet).
It depends on your requirements.

If you are only using one compiler, ever, and don't need your code to
work with any other compiler, there is no point even in sticking to
C99. You can use any feature of the implementation that you like!

But if your code has to work with many implementations (i.e. more than
one), it may be necessary to restrict yourself to the features that are
available in all your implementations. And, in some cases, you do not
know at the time of writing the code which implementation(s) it will
eventually be required to work with. In such cases, it makes sense to
write code that conforms to the common subset of C90 and C99.

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at the above domain, - www.
May 10 '07 #10
Pietro Cerutti wrote:
>gcc -Wall -W -ansi -pedantic
Why would you use -ansi instead of -c99?
Most compilers don't conform to C99 (including gcc, despite the switch).

Yes, I know. But still, I don't see the point to completely avoid C99
A few months back, I had a program that ran approximately 60% slower
when compiled under gcc with -std=c99 as opposed to -std=c89. I
didn't spend a lot of time tracking down the issue: I just rewrote
the (fortunately few) sections of code that were using c99 features.

May 10 '07 #11
we********@gmail.com wrote:
Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice?
To improve you must write programs.
Is reading others' codes the best way?
No, not in my opinion. Reading code teaches you the allied skill of
reading code. It's important for a career as a programmer, but not much
help in learning to write code. One major reason is that you don't yet
have the skill level to tell good code from bad.

My advice is to think of a moderately complex project that interests
you. Things that you find interesting in and of themselves are more
pleasurable to work on. And it will be work. It will be slow and
frustrating in the beginning.

I used a text-adventure game as my training project. This had a number
of advantages. First, I was interested in the subject. Secondly, these
sorts of games cover many aspects of programming, including text
processing, file management, changeable state, data structures, and
algorithms galore.

Most of the tasks were applicable to learning standard C, without
getting off into platform-specific stuff like graphics.


Brian
May 10 '07 #12
On May 9, 9:57 pm, "weidong...@gmail.com" <weidong...@gmail.com>
wrote:
Hi,

I have just finished reading some tutorials on C, I am wondering how I
could improve my skill. Is there any advice? Is reading others' codes
the best way? If so, what type of codes are suitable for novice? The
ones in fsf freed software directory? I have been reading quite a few
books on the programming language C, but when I tried to start a
project of my own, I find myself to be incompetent. What should I do?
Thanks in advance.
1) Read some _good_ books. K&R, of course, if you haven't already.
It's fairly old now, but Peter van der Linden's "Expert C Programming:
Deep C Secrets" is highly readable and contains some good (if somewhat
Unix-centric) info. It's worth it for the chapter on understanding
complex declarations all by itself. SAMS C Unleashed also has some
very good stuff, though it's more specifically directed at solving
specific problems.

2) Write more code. The only way to get better at writing C code is
to practice. The exercises in K&R have been mentioned, and van der
Linden's book has some good non-trivial exercises in it as well.

3) Invest in Gimpel's PC-lint, _learn_ how to use it, _run_ all your
code through it, and _understand_ what it tells you (i.e., fix the
code, not the error). Awesome tool, and the error descriptions are
very instructive. www.gimpel.com

Regards,

-=Dave

May 10 '07 #13
Pietro Cerutti wrote:
jaysome wrote:
.... snip ...
>
>gcc -Wall -W -ansi -pedantic

Why would you use -ansi instead of -c99?
Because the C99 implementation is not complete.

--
<http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.txt>
<http://www.securityfocus.com/columnists/423>
<http://www.aaxnet.com/editor/edit043.html>
<http://kadaitcha.cx/vista/dogsbreakfast/index.html>
cbfalconer at maineline dot net

--
Posted via a free Usenet account from http://www.teranews.com

May 11 '07 #14
In article <46**********************@news.sunrise.ch>
Pietro Cerutti <ga**@gahr.chwrote:
>... I don't see the point to completely avoid C99
features just because some of them are not implemented (yet).
The "Status of C99 features in GCC" [1] explicitly says what you can use
safely and what you can't.
So why not start using the useful features which we have at disposal
now, and wait for the remaining ones to come ...
The big problem here is that the set of "C99-isms" that are
implemented not-at-all, incompletely, or incorrectly varies from
one compiler to the next (even one gcc to the next, in some
cases, although actually running into this is much rarer).

As always, one must make engineering tradeoffs. If some feature
is sufficiently valuable, you might want to tie yourself to "we'll
only ever use Zog C version 3.14159265". Just be sure you can
afford to go down with it if it sinks like the Titanic. :-)
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.
May 11 '07 #15
Bill Pursell <bill.purs...@gmail.comwrote:
A few months back, I had a program that ran approximately
60% slower when compiled under gcc with -std=c99 as
opposed to -std=c89. I didn't spend a lot of time
tracking down the issue: I just rewrote the (fortunately
few) sections of code that were using c99 features.
If it compiled using -std=c89, then what c99 features
_needed_ rewriting?

--
Peter

May 11 '07 #16
On 10 May 2007 15:49:11 -0700, Dave Hansen <id**@hotmail.comwrote:
>On May 9, 9:57 pm, "weidong...@gmail.com" <weidong...@gmail.com>
wrote:
[snip]
>3) Invest in Gimpel's PC-lint, _learn_ how to use it, _run_ all your
code through it, and _understand_ what it tells you (i.e., fix the
code, not the error). Awesome tool, and the error descriptions are
very instructive. www.gimpel.com
Excellent advice.

I've used PC-lint on C and C++ code and have found it invaluable. The
number of different target platforms/compilers I've used it for is in
the double-digit range, and I've never come across any
platforms/compilers where it didn't flag something of concern, and in
almost all cases flagged one or more plain and simple bugs.

PC-lint teaches you to become a better programmer, on top of finding
bugs at compile-time that would hopefully, but not necessarily, be
found at run-time. Its -w4 option is like a gcc -pedantic option on
steroids.

Best regards
--
jay
May 11 '07 #17

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: NickName | last post by:
I'm wondering if someone has thought about this, one desires to enhance his/her sql skills proactively vs. skills gained over a period of time merely because of work experience. SQL skill here...
3
by: Anand | last post by:
Hi Iam keen interested to improve my skills in c programming. Now Iam familiar with all the syntax and concepts. My main idea is to know how entire c compiler behaves in all circumstances(i.e...
32
by: Fresh Air Rider | last post by:
Hi I understand that ASP.net 2.0 (Whidbey) is going to reduce coding by 70%. Surely this is going to de-skill or dumb down the developer's task and open up the task of web development to less...
10
by: sivashankar21 | last post by:
how i can improve my programming skill in pointer using c++
1
by: google1 | last post by:
Has anyone written this one? Seen such a thing? Please send me a link: Skill Testing Question Exploder --------------------------------------------- Basically the plan is to create the...
0
by: Jeff Rush | last post by:
(inspired by a thread on the psf-members list about Python certification) Those who know me know I am no fan of the programmer certification industry and I agree that your typical certificate...
18
by: Linny | last post by:
Hi, Came across this article in the ComputerWorld website which has included C in the top ten dying languages. The top 10 dead (or dying) computer skills...
2
by: CreativeMind | last post by:
hi, actually i m working on a project which has poor designed database. this is due to cliet's continuous changes.unfortunately i have not any experience to optimize existing database. but i want...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.