The current scope of the advanced C++ exam. What do you think?



  • as you might have noted we released two advanced exams in beta. One of them covers C++. Its scope (in beta too) is documented in "here":http://qt.nokia.com/developer/learning/qt-curriculum/advanced-exam-curricula/qualified-in-c-with-qt-curriculum. The rational behind this scope is to focus on those areas of C++ which are substantial for efficient Qt development. We did not put many essential C++ topics in it, since we think that they are indirectly covered by the Qt Essential exam. We assumed that it is not possible to get started with Qt and then pass the Qt Essentials exam without knowing basics of C++.

    On the other hand, we hear many reports from our customers and from the Qt user community in general, that more advanced C++ knowledge does help projects a lot. There are many people using C++ in a C-style and so do not progress as fast as they could or even make some mistakes. This was an additional motivation to create a C++ exam.

    What do you think about "its scope":http://qt.nokia.com/developer/learning/qt-curriculum/advanced-exam-curricula/qualified-in-c-with-qt-curriculum ? Are any topics missing? Are some not required from your point of view? What is your experience in Qt projects regarding the influence of C++ skills on the work progress and overall success? Lets discuss here! :-)

    Cheers!



  • Maybe few words about namespaces and the order in which constructor/destructors are called in case of inheritance?

    UPD: I don't know is structs should be mentioned.



  • Apart from what you already have, we can think of adding following points too...

    Types, Declarations and Definitions

    * Understand how to use reference, pointers and difference between them.
    

    Classes

    * Singleton Class
    

    Inheritance and Polymorphism

    * Understand using Interitence and polymorphism by making proper use of interface classes to keep code platform independent. 
    

    Miscellaneous Topics

    * Using enums and struct.


  • I feel, C++ developer is not a complete C++ developer until he don't have knowledge STL and high performance BOOST libraries. ;)

    Thus we can also give a thought on how to use/mix BOOST libraries in Qt project.



  • I'm not sure that extensive questions about stl and boost should be in this exam. Maybe in some other, but I don't think this one will fit it correctly.
    Also boost is a big library and I don't know what should be included and what should not be. All in all it is a Qt exam, not boost.



  • Yeah! I agree with you. I know it was wired Idea to ask of BOOST.


  • Moderators

    Lord: My understanding of the certification is that we want something for a developer to document her/his expertise in working with Qt.

    To use Qt you do of course need to understand the C++ programming language. STL and boost is rarely used in Qt code though, so I personally see little need to cover those.

    I do agree that any serious C++ programmer should know at least the basics of both. It is just out of scope of the certification program... and there is only so much you can test for in the very limited amount of time the certification takes.



  • [quote author="Denis Kormalev" date="1287729141"]I'm not sure that extensive questions about stl and boost should be in this exam. Maybe in some other, but I don't think this one will fit it correctly. Also boost is a big library and I don't know what should be included and what should not be. All in all it is a Qt exam, not boost.[/quote]

    I'm new here. All I know about C++ are from books. One thing a programmers needs to understand are threads, and maybe not in depth, but if you read a portion of existing code, you should at least be able to identify that this is a thread. Since QT wants to be cross platform, the Boost's thread library is essential. - I'm a business man, if I hire an advanced QT programmer, I do expect one that knows more than myself (hobbiest). Just my thoughts, why I actually think Boost should be in there somehow. :)



  • Taamalus, ok, but if we will think in such way then we should also talk about including WinAPI, Posix Threads and whatever exists for threading? And why only threads? Boost is a huge library, and I agree with Tobias that experienced programmer should know at least concepts and basics of it, but not sure that threading is the basic thing.
    And also boost things should be in another exam, I think (maybe named "Advanced programming with Qt in case of using other libraries". Vladimir, what do you think? :) ).



  • Regarding boost: I think it's completely out of scope for a Qt related exam! The scope of the exam should be to show your advanced skills of programming C++ together with the Qt framework. The basic problems of multithreaded programming are the same with every framework, so we should show how to solve it with Qt. This applies to many other pitfalls of programming too.

    And, come on, Qt is cross platform. I'm using it in a pretty big project for 7 years now and we never were in need for boost in it. The other way round gives you the sugar: We introduced Qt's non-GUI classes in another project where originally the C++ stdlib and boost is used, because they are much easier to use.

    BTW: If I was a manager to hire a programmer, and if I would care about a Qt exam, I would not expect the programmer to be a boost expert. In contrary - he/she should know how to solve the problems in the Qt way of live. If had need for a boost expert, I'd look for something like an "advanced c++ programming with boost" certification :-)



  • On one hand I understand that people find STL and boost important, but both of these will in my opinion be completely (STL almost completely) out of scope for a Qt related C++ exam.

    Also STL and boost seem to encourage making code almost completely unreadable because of the rather huge amount of templates used/required there. Templates are useful, but you can overdo it as well. I see no reason why Qt, who value proper interfacing practices would make an exam that covers these two libraries.



  • Boy oh boy did I ever step into something.

    To Denis Kormalev
    The reason I picked threads is because a sample is included in the QT Creator. Every C++ programmer knows of Boost. Anyone, working with servers needs to understand threads. When one does, Boost is a welcome solution provider; the one that works with both Pthreads and Windows Handles, for example. - Maybe Save Pointers instead? Boost is there too. It's almost a C++ standard.

    To Volker
    As I wrote: I'm new here, and I have no formal education in programming. I've used Boost and STL extensively (3 years) because my computer was/is a Windows OS, and I had nothing else to work with. Maybe I will be happily surprised by QT.

    To Franzk
    I think STL is standard C++, and comes with QT Creator, or at least with my MinGW. I understand QT developers promoting QT and to omit Boost in exams, but I believe the exam under Miscellaneous Topic calls for templates and QTContainers, that looks very close to STL. ;)

    Anyways, the truth is out now, you are dealing now with an unofficial Boost and STL promoter, whilst also enjoying QT Creator. Happy coding to all.



  • Taamalus: I suggest you try it! You will be surprised how easy it is to use the Qt classes. Also, in many cases, you can entirely omit boost in a project, because Qt has so many of its functionality. Doubling it, one could argue, but that's another topic.

    I'm in no way a boost expert, I only hardly know it. Parts of boost will eventually become part of the next C++ standard, and we will use it. But it's not clear when the standard comes out, and even less clear when all major compilers will support it.

    So yes, almost every C++ programmer knows of boost, but that does not mean that they use it. If you already have Qt in your project, for various reasons, which provides much if not all of the (needed) functionality of boost, why should I bother complicating the project with another library?

    Regarding containers: Yes, they are modeled after STL; including iterators. But there are also Java style iterators because some programmers prefer that.

    And keep in mind: STL is given to you by the compiler, not the IDE like Qt Creator which only happens to include MinGW in Windows. In any case, you have to add boost as an external library to your project, just as you do with Qt. The sample is there to show you how to integrate Qt and boost in the very same project, if you need to.

    Please don't get me wrong: I'm not advocating against boost. I'm just not convinced it is necessary if you have Qt in your project anyways (leaving out external dependencies one cannot change, of course).

    To become on topic again, finally, the title of the exam is "Qualified in C++ with Qt" - for me it's obvious that this exam does and should only cover the C++ standard and the Qt libs, not any external library.



  • [quote author="Volker" date="1288951879"]Taamalus: I suggest you try it! You will be surprised how easy it is to use the Qt classes. Also, in many cases, you can entirely omit boost in a project, because Qt has so many of its functionality. Doubling it, one could argue, but that's another topic.[/quote]
    :D
    As a side note, I've got an existing model editor program (for games), written entirely with the QT SDK. It needs to be enhanced a little. I'll do more than try QT. - Also, as you know, opinions are dime a dozen, everyone has one, I could not resist voicing mine. I was heard, what more could I ask? Thanks, to you and everyone else. :)

    Once, more happy coding! :)



  • [quote author="Taamalus" date="1288919489"]
    I think STL is standard C++, and comes with QT Creator, or at least with my MinGW. I understand QT developers promoting QT and to omit Boost in exams, but I believe the exam under Miscellaneous Topic calls for templates and QTContainers, that looks very close to STL. ;)[/quote]
    In that case anything that uses templates looks like STL. Nice one. STL should not considered C++ basics because of the simple fact that you can completely do without STL. That would of course mean you would have to implement a lot yourself.



  • @@[quote author="Franzk" date="1289058858"] [quote author="Taamalus" date="1288919489"] I think STL is standard C++, and comes with QT Creator, or at least with my MinGW. I understand QT developers promoting QT and to omit Boost in exams, but I believe the exam under Miscellaneous Topic calls for templates and QTContainers, that looks very close to STL. ;)[/quote] In that case anything that uses templates looks like STL. Nice one. STL should not considered C++ basics because of the simple fact that you can completely do without STL. That would of course mean you would have to implement a lot yourself.[/quote]
    Not sure, if to respond or not, but since it's a direct quote, my closing arguments ... ;)

    The QT reference library I have has a Qvector.h
    I quote QT's own sample:

    QVector<int> integerVector;
    QVector<QString> stringVector;

    I stand behind what I wrote, "it looks very close to STL", in case <vector>

    Btw. What is considered valid components in C++ is determined by the
    http://www.open-std.org/jtc1/sc22/wg21/docs/standards



  • In that case, consider QString versus std::string. And don't forget the STL vector is one with default template arguments.



  • My opinion is, boost shouldn't be included to Qt exams. If you needed boost specialist you should ask him for boost certification. Qt is not a part of boost library, and boost isn't part of Qt. Yes, it implemets some methods, that arleardy implemented in boost. But it is another technology.

    BTW, we can think of adding following points too…
    QFlag{s}, standart templates, such as singleton.



  • BTW, I wrote wiki page about using QFlags. But, I've created it not in learning category. Plase move it.
    "QFlags":http://developer.qt.nokia.com/wiki/QFlags_tutorial


  • Moderators

    IrQX: I put your page into the "snippets" category. Feel free to change that if you like (the Category is just a tag in the page which can be edited like the rest of the text).



  • I think the scope of the exam is fine as it is. STL (from my point of view) is an extension to C++ and can be used as it is standard, but it's not an integral part of C++. Same to Boost, it is good, I also use it, but it's not part of raw C++. And even not of Qt. So for this exam, both should not be considered.



  • [quote author="Tobias Hunger" date="1290588895"]IrQX: I put your page into the "snippets" category. Feel free to change that if you like (the Category is just a tag in the page which can be edited like the rest of the text).[/quote]

    Thanks. I've lost a lot of time searched how to move topic.



  • The keyword volatile should be known and the new operator overloading --
    this should be interesting to those who think C++ cannot be used in embedded programming. As I learned when programming a game with min-max-trees: calling new does not automatically mean "digging the heap".

    And - how could I forget about this! - exception handling should be included.



  • [quote author="Denis Kormalev" date="1290689759"] Wolf P., operator new overloading is a really specific thing and I'm not
    sure it should be included.
    Exceptions are not a common practice in current Qt library design, so no
    sure they should be in this exam (exam is about Qt all in all, not about
    generic C++)[/quote]

    Exception handling is an integral part of the C++ standard for decades,
    although often misunderstood or misused.
    Imagine you are about to use existing excellent C++ sources in your Qt
    project that make use of exceptions, should you avoid it? In this it
    will be better to know how to catch them the right way and transform them.



  • Wolf P., as for me it is somewhere close to boost. Of course good developer should know how to work with both of them, but not sure it is good part of Qt exam.



  • Same for overloading new. I agree, that custom memory management is sometimes needed, buts The exam is for C** with Qt. And I'm not pretty sure, if overloading new is really relevant for most Qt projects...



  • [quote author="Gerolf Reinwardt" date="1290695575"]And I'm not pretty sure, if overloading new is really relevant for most Qt projects...[/quote]

    It's questionable if it is relevant to most C++ projects at all :-) Knowing that something is possible, does not necessarily mean that a relevant bunch of programmers do need it regularly.



  • Ok -- what about the following?

    Classes

    • know when to "forbid" copy constructor and assignment operator

    Miscellaneous Topics

    • know the "pimpl" idiom

    Advanced Topics

    • how to create APIs that make good code looking good and bad code looking bad


  • Last one is something that I can't imagine how to put it into exam format.



  • agreed with Denis. Last one is redundant.



  • [quote author="IrQX" date="1290934467"][...] Last one is redundant.[/quote] redundant? In what sense?

    I would say you can check it with multiple choice tests. Unexperienced developers tend to look only on their class instead of checking its usability. For instance, in the development of an API they often prefer to add additional parameters to existing methods instead of adding new methods.
    I think good API design can be tested in an exam.



  • [quote author="Wolf P." date="1290946037"]
    I think good API design can be tested in an exam.[/quote]

    IMOH, "good API design" is, at least to a big part, a matter of taste, it's hard to be tested in an exam.



  • [quote author="Wolf P." date="1290946037"][quote author="IrQX" date="1290934467"][...] Last one is redundant.[/quote] redundant? In what sense?

    I would say you can check it with multiple choice tests. Unexperienced developers tend to look only on their class instead of checking its usability. For instance, in the development of an API they often prefer to add additional parameters to existing methods instead of adding new methods.
    I think good API design can be tested in an exam.[/quote]

    Any suggestions, how it can be implemeted in exam? I means example qustions for it.
    There are no method, that allows estimate quality of design. How you can say that "this design is bad" and "this design is good"? It will be only yours humble opition, no more.
    That is formal mathimatics problem, which is impossible to prove, yet. Anyway, "good API design" shouldn't be included in "advaced c++ exam". Designing good API is modeling problem. Basics of "API designing in C++" - virtual functions is already included in cirriculum block.

    P.S. I'm suspecting, that I made some errors in text. I appologize for it. English isn't my native language. Have a good day.



  • Today, I took this exam. I must told to you next thing.
    I answer on question for 32-34 minutes. Next I wrote comments for about 15-20 minutes. Then test-system said, that time is over. 33 + 17 = 50 minutes, no 60!. When I took Qt Essentails exam this problem also was present. And in first exam was no extra-time for non-english people.

    As for me, exams was almost easy, and that time more then enough. But this issue not seems to be good. So, I guess, is this problem of testing center, or something other?



  • Creating an API isn't really a c++ specific skill, is it?

    Whether an API is good or bad is somewhat measurable, but hard to do in a test. The coding style part is subject to taste and unfortunately contributes greatly to whether APIs look nice or not (I really dislike the boost API mostly because of the naming conventions...).



  • I think (after reading the replies here) that involving the API thing in a C++ test discussion wasn't such a good idea. Maybe I'd better collect some thougts on this topic first... (the wiki could probably be the right place for an early sketch?)

    [quote author="Franzk" date="1291152081"]Creating an API isn't really a c++ specific skill, is it? [/quote]
    Since APIs depend on language and the framework(s) being used, their properties should be evaluated with respect to the Qt/C++ case, in my opinion.

    I'm not sure if it can be tested at all. But if I see that people are tought classes, inheritance, encapsulation and so on, it seems clear to me that most of them will actually create interfaces, other developers have to code to. Why remain in a (sort of) hello-world loop(++) - I think it's no secret that hello-world programming does not enable anybody to do anything useful for real-world tasks.



  • [quote author="Franzk" date="1291152081"]Creating an API isn't really a c++ specific skill, is it?

    Whether an API is good or bad is somewhat measurable, but hard to do in a test. The coding style part is subject to taste and unfortunately contributes greatly to whether APIs look nice or not (I really dislike the boost API mostly because of the naming conventions...).[/quote]

    +1. There are no ideal API. Who will justify? For example, if think, some API is good, somebody else think not. It is like different coding rules in different companies.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.