will reading compiler construction increase my programming skills?
This may help you to know how compiler works,if you writing compiler this will increase you skills.This is hard to understand compiler construction in early state of programming education
I would say no, it probably won't. Compilers are a wonderful topic, and the things you'll learn could be valuable, but there are a lot of excellent programmers out there who haven't written a full-blown compiler.
The Dragon Book would be the book to start with. I haven't read it myself, but I've heard that some of the optimizations included in the first edition would be considered out of date today. There's been a lot of progress made on just in time compilers. I'm not sure that textbooks will include this cutting edge research.
I would say that even if you know about compilers and the optimizations they apply, you shouldn't let that knowledge have a great effect on the way you write code. The person who wrote the compiler is probably smarter than you; let them do their job. You're likely to screw things up for them by trying to outguess the compiler.
I think everyone can benefit from simple simulators that show how grammars, parsers, ASTs, code generation, etc. work. Maybe that's a good place to start. Something simpler than learning how a compiler is written would be a good idea.
Personally, the thing that made me a better programmer was looking at the code generated by compilers (assembler list). Knowing how a compiler works (I do) and beeing able to write a compiler (I did) is not that useful.
It's interesting to look into an assembler list generated with parameters set to optimisation, and an assembler list of the same source code without optimisation compilation. And to compare the result of different compilers. That way, you'll learn to adapt your code to the compiler (even if you write in C, C++, C#, ...).
Compiler construction can definitely improve your programming skills even if you never write a production compiler. If nothing else a compiler is a really good real world example of a number of graph algorithms put to use. The other benefits are even more important. You will gain an understanding of why programming languages are structured the way that they are and what the compiler is really doing. If you ever have to troubleshoot compiler or optimizer problems, you will thank yourself for paying attention in class.
If you plan on doing embedded device work, I would highly suggest taking the course and paying close attention. Then try to find a course in operating systems that covers executable loading (i.e., linkers and loaders). Understanding what the compiler is doing, how it structures assembly, and how dynamic library loading works have been extremely helpful in debugging, diagnosing, and reasoning about problems I have encountered in writing and deploying embedded applications.